当我使用 Spring RestTemplate 使用静态 Web 服务时,出现以下异常
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "IMP-SourceTxnId" (class com.model.ResponseBaseParameters) not marked as ignorable (4 known properties: , "sourceTxnId", "incommTxnId", "responseCode", "responseText"])
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@2f2ddd7c; line: 1, column: 130] (through reference chain: com.incomm.ife.model.rogers.RogersTransactionResponse["responseBaseParameters"]->com.incomm.ife.model.rogers.ResponseBaseParameters["IMP-SourceTxnId"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79)
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1159)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:449)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2094)
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readInternal(MappingJackson2HttpMessageConverter.java:123)
... 54 more
响应参数为
{
"responseBaseParameters":
{
"responseCode": "32",
"responseText": "Invalid Request",
"incommTxnId": null,
"IMP-SourceTxnId": "551932ba-6af4-44f9-ab98-db5bc96e962b"
}
}
我的 POJO 类是
public class ResponseBaseParameters {
private String responseCode;
private String responseText;
private String incommTxnId;
@JsonProperty("IMP-SourceTxnId")
private String sourceTxnId;
public String getResponseCode() {
return responseCode;
}
public void setResponseCode(String responseCode) {
this.responseCode = responseCode;
}
public String getResponseText() {
return responseText;
}
public void setResponseText(String responseText) {
this.responseText = responseText;
}
public String getIncommTxnId() {
return incommTxnId;
}
public void setIncommTxnId(String incommTxnId) {
this.incommTxnId = incommTxnId;
}
public String getSourceTxnId() {
return sourceTxnId;
}
public void setSourceTxnId(String sourceTxnId) {
this.sourceTxnId = sourceTxnId;
}
}
请了解我为什么会收到此错误。谢谢
要通过 Jackson 映射您的 Json,您必须创建另一个包含 POJO 类的对象,有些像这样:
您的 POJO 类:
public static class ResponseBaseParameters {
private String responseCode;
private String responseText;
private String incommTxnId;
@JsonProperty("IMP-SourceTxnId")
private String sourceTxnId;
// Getter & Setter Methods...
}
然后是包含您的 POJO 类的类
ResponseBaseParameters
:
public class ResponseBase{
@JsonProperty("responseBaseParameters")
private ResponseBaseParameters responseBaseParameters;
public ResponseBaseParameters getResponseBaseParameters() {
return responseBaseParameters;
}
public void setResponseBaseParameters(ResponseBaseParameters responseBaseParameters) {
this.responseBaseParameters = responseBaseParameters;
}
}
如果你尝试这个,它会起作用
public static void main(String[] args) throws JsonProcessingException {
String s = """
{
"responseBaseParameters":
{
"responseCode": "32",
"responseText": "Invalid Request",
"incommTxnId": null,
"IMP-SourceTxnId": "551932ba-6af4-44f9-ab98-db5bc96e962b"
}
}
""";
ResponseBase r = JsonMapper.builder().build().readValue(s, ResponseBase.class);
System.out.println(JsonMapper.builder().build().writerWithDefaultPrettyPrinter().writeValueAsString(r));
}
输出是:
{
"responseBaseParameters" : {
"responseCode" : "32",
"responseText" : "Invalid Request",
"incommTxnId" : null,
"IMP-SourceTxnId" : "551932ba-6af4-44f9-ab98-db5bc96e962b"
}
}
如果您对此解决方案有任何疑问,请告诉我。