복붙노트

[SPRING] @ JsonProperty 예상대로 작동하지 않습니다.

SPRING

@ JsonProperty 예상대로 작동하지 않습니다.

Spring RestTemplate을 사용하여 편안한 웹 서비스를 사용할 때 다음 예외가 발생합니다.

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;
}

}

왜이 오류가 발생하는지에 대한 통찰력을주십시오. 감사

해결법

  1. ==============================

    1."REST API"에 대한 많은 구현이 있으며 서로 충돌합니다. 많은 시간이 지나면이 구성으로 해결했습니다.

    "REST API"에 대한 많은 구현이 있으며 서로 충돌합니다. 많은 시간이 지나면이 구성으로 해결했습니다.

    import com.fasterxml.jackson.annotation.JsonProperty;
    ...
    @JsonProperty("cep")
    private String cep;
    

    이 패키지에 org.codehaus가 아닌 JsonProperty가 있어야합니다 ...

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19</version>
        <scope>test</scope>
    </dependency>
    

    요약하면 : 저지 클라이언트 1, jackson json 속성 및 다른 모든 jaxrc 라이브러리를 제거합니다.

    Obs :. 컨테이너가 이미 제공되었으므로 jackson을 사용했지만 작동한다면 다른 조합을 테스트 할 수 있습니다.

  2. from https://stackoverflow.com/questions/21125173/jsonproperty-not-working-as-expected by cc-by-sa and MIT license