【发布时间】:2020-07-31 19:06:05
【问题描述】:
我有一个结构列表,我将从 restEndpoint 获取它,我必须将它映射到 Java 对象列表。但在这个项目中,我刚刚给出了一个 json 格式的字符串作为输入。当我尝试在我的对象中获取字符串数据时,我总是得到 null,而当我获取整数时,我总是得到 0。
我认为 objectMapper 无法将字符串 json 映射到对象。但我没有得到任何错误。
结果 = mapper.readValue(json, new TypeReference>() {});没有工作。也许是一些配置或版本问题?>
我的对象
public class myObject {
@JsonProperty("userID")
private int userID;
@JsonProperty("id")
private int id;
@JsonProperty("title")
private String title;
@JsonProperty("body")
private String body;
@JsonCreator
public myObject() {
}
@JsonProperty("userID")
public int getUserId() {
return userID;
}
@JsonProperty("userID")
public void setUserId(int userId) {
this.userID = userId;
}
@JsonProperty("id")
public int getId() {
return id;
}
@JsonProperty("id")
public void setId(int id) {
this.id = id;
}
@JsonProperty("title")
public String getTitle() {
return title;
}
@JsonProperty("title")
public void setTitle(String title) {
this.title = title;
}
@JsonProperty("body")
public String getBody() {
return body;
}
@JsonProperty("body")
public void setBody(String body) {
this.body = body;
}
我的映射器函数是这样的
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
try {
//List<myObject> mstCodes = null;
String json = "[{\"userID\":1,\"id\":\"1\",\"title\":\"IT\",\"body\":\"123234\"},{\"userID\":0,\"id\":\"2\",\"title\":\"Accounting\",\"body\":\"adsfnsdf\"}]";
List<myObject> mstCodes = mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, myObject.class));
System.out.println(mstCodes.size());
System.out.println(mstCodes.get(0));
System.out.println(mstCodes.get(0).getUserId());
System.out.println(mstCodes.get(0).getBody());
} catch (IOException e) {
System.out.println("Failed serializing response" + e.getMessage());
}
我收到的上述打印语句的输出是:
2
com.example.varun.testProject$myObject@4e7dc304
0
null
这可能是一个简单的错误,但感谢任何帮助。谢谢。
【问题讨论】:
-
* .withGetterVisibility(JsonAutoDetect.Visibility.NONE) .withSetterVisibility(JsonAutoDetect.Visibility.NONE)* 字面意思是 - 没有 setter 和 getter....
-
您应该只将@JsonProperty 应用于字段(从getter/setter 中删除它们),然后使用没有可见性规则的默认
ObjectMapper mapper = new ObjectMapper();- 在您的情况下应该可以正常工作, -
它几乎肯定不会“返回”它们,而是根本没有将任何东西反序列化到它们中(让它们处于默认状态)。从您的类中删除每一个Jackson 注释,并从您的映射器中删除每一个自定义配置,看看它是否按预期工作。您正在做很多您还不了解的手动配置,所有这些都是不必要的,因为 Jackson 已被调整为默认情况下运行良好。
-
这显然是我之前的想法。我刚刚写了 ObjectMapper mapper = new ObjectMapper();没有任何可见性规则,也没有 JsonProperty。即使删除所有内容也无法正常工作
-
一一删除了所有属性。没有任何工作。只需在构造函数中保留 @JsonCreator public myObject() { } 和 @JsonIgnoreProperties(ignoreUnknown = true) public class testProject {
标签: java jackson-databind