我有一个json作为字符串:
{
"passnummer": "passnummer",
"nummerDesAufenthaltstitels": "nummerDesAufenthaltstitels",
"ppkNummer": "ppkNummer",
"fingerabdruckreferenznummer": "fingerabdruckreferenznummer"
}
对于单词的分离没有一致性,这意味着一些键是 Camel 式的,而一些不是。2我对此没有影响。3我不能改变模型。
我必须将这个字符串读入Java对象。我对Java模型也没有影响,所以我不能向模型的字段添加@JsonProperty或@JsonAlias注解或任何其他内容。
因此,java模型看起来如下:
public static class Request {
protected String passnummer;
protected String nummerDesAufenthaltstitels;
protected String ppkNummer;
protected String fingerabdruckreferenznummer;
public String getPassnummer() {
return this.passnummer;
}
public void setPassnummer(String value) {
this.passnummer = value;
}
public String getNummerDesAufenthaltstitels() {
return this.nummerDesAufenthaltstitels;
}
public void setNummerDesAufenthaltstitels(String value) {
this.nummerDesAufenthaltstitels = value;
}
public String getPpkNummer() {
return this.ppkNummer;
}
public void setPpkNummer(String value) {
this.ppkNummer = value;
}
public String getFingerabdruckreferenznummer() {
return this.fingerabdruckreferenznummer;
}
public void setFingerabdruckreferenznummer(String value) {
this.fingerabdruckreferenznummer = value;
}
}
当我将json反序列化为java对象并打印值时:
Request request = objectmapper.readValue(jsonPayload, Request.class);
System.out.println("passnummer: " + request.getPassnummer());
System.out.println("nummerDesAufenthaltstitels: " + request.getNummerDesAufenthaltstitels());
System.out.println("ppkNummer: " + request.getPpkNummer());
System.out.println("fingerabdruckreferenznummer: " + request.getFingerabdruckreferenznummer());
我得到如下结果:
passnummer: passnummer
nummerDesAufenthaltstitels: nummerDesAufenthaltstitels
ppkNummer: ppkNummer
fingerabdruckreferenznummer: null
所以我的问题是:为什么objectMapper不能反序列化fingerabdruckreferenznummer
?
编辑
对象Map器配置:
public ObjectMapper objectMapper() {
final ObjectMapper objectMapper = new ObjectMapper();
final SimpleModule module = new SimpleModule();
module.addSerializer(TeilbekanntesDatumMitUnbekannt.class, new DateSerializer());
objectMapper.registerModule(module);
objectMapper.registerModule(new JavaTimeModule());
objectMapper.registerModule(new JaxbAnnotationModule());
objectMapper.configure(WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setVisibility(objectMapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
return objectMapper;
}
编辑2
如果我使用play new ObjectMapper()
,则会得到:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "fingerabdruckreferenznummer"
2条答案
按热度按时间vmdwslir1#
使用您的
ObjectMapper
(除了您没有发布的部分)和以下代码,结果如预期:编号
结果
因此,要么您的json-payload不同,要么您的
objectmapper
有一些附加配置。vyu0f0g12#
ObjectMapper
可以配置为筛选出某些字段。创建您自己的ObjectMapper或确保您知道配置了什么。这可以使用Mixin完成。