gpt4 book ai didi

java - Jackson注释无法解析 boolean 字段

转载 作者:行者123 更新时间:2023-11-30 05:24:42 26 4
gpt4 key购买 nike

我的数据对应的Java类如下,

package com.some.package;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.gson.reflect.TypeToken;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.lang.reflect.Type;


@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class A {
public static final Type UNMARSHALLER_TYPE = new TypeToken<A>(){}.getType();

@JsonProperty("id")
String id;

@JsonProperty("name")
String name;

@JsonProperty("is_enabled")
boolean isEnabled;
}

我编写的测试用例类失败,因为 isEnabled 始终为 false

package com.some.package;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.junit.Test;

import java.io.IOException;

import static org.junit.Assert.*;

/**
* Created by tanny on 16/11/19.
*/
public class ATest {

private static final String RESPONSE_JSON = "{\"is_enabled\": true, \"name\": \"XXX\", \"id\":\"mock-id\", \"num\":12}";

@Test
public void testAUnmarshaller() throws IOException {
// given
PapiSite payload = new Gson().fromJson(RESPONSE_JSON, A.UNMARSHALLER_TYPE);

// then
assertNotNull(payload);
assertTrue(payload.isEnabled());
assertEquals("XXX", payload.getName());
}
}

看起来 Jackson Data Binder 无法解析测试中传递的 json 字符串。我有可能做错了什么吗?任何帮助或指导将不胜感激。

最佳答案

问题是您混合了两个不同的库jacksonGsonJsonProperty , JsonIgnoreProperties属于 jackson 并且您正在尝试使用 Gson 进行解析在测试用例中

使用Gson:您可以使用@SerializedName使用Gson时,您可以找到更多信息here关于Gson

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class A {
public static final Type UNMARSHALLER_TYPE = new TypeToken<A>(){}.getType();

@SerializedName("id")
String id;

@SerializedName("name")
String name;

@SerializedName("is_enabled")
boolean isEnabled;
}

使用 Jackson :您可以使用 ObjectMapper ,您可以找到更多信息here关于 jackson

 @Test
public void testAUnmarshaller() throws IOException {
// given
ObjectMapper objectMapper = new ObjectMapper();
PapiSite payload = objectMapper.readValue(RESPONSE_JSON, A.class);

// then
assertNotNull(payload);
assertTrue(payload.isEnabled());
assertEquals("XXX", payload.getName());
}

关于java - Jackson注释无法解析 boolean 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58897590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com