com.sysml.syscl.syscind.exc를 지정합니다.인식할 수 없는 속성 예외:인식할 수 없는 필드
역직렬화 문제가 발생했습니다.
이게 제 수업입니다.
public class Response {
private Object ResObj;
private int ResInt;
public Object getResObj() {
return ResObj;
}
public int getResInt() {
return ResInt;
}
}
역직렬화하는 JSON은 다음과 같습니다.
{"ResObj":{"ClientNum":"12345","ServerNum":"78945","IdNum":"020252"},"ResInt":0}
다음과 같은 예외가 있습니다.
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ResObj" , not marked as ignorable (0 known properties: ])
at [Source: java.io.StringReader@1f758500; line: 1, column: 20] (through reference chain: ["ResObj"])
추가하지 않음:
@JsonIgnoreProperties(ignoreUnknown = true)
ResObj를 얻고 싶어서...
주석을 추가하면 통과하지만 null로 설정됩니다.내가 원하지 않는 것 같아.
콩에 세터를 포함하지 않고 필드 및 게터만 사용하고 싶은 경우 다음 Visibility Checker를 사용할 수 있습니다.ObjectMapper필드 가시성을 가능하게 합니다.
예를 들어 다음과 같습니다.
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.setVisibility(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
Jackson이 속성을 설정할 수 있도록 하려면 Setter 메서드가 필요하며, json의 필드를 소문자로 시작해야 합니다.
public class Response {
private Object ResObj;
private int ResInt;
public Object getResObj() {
return ResObj;
}
public void setResObj(Object ResObj) {
this.ResObj = ResObj;
}
// ...
}
또, 다음과 같이 합니다.
{"resObj":{"clientNum":"12345","serverNum":"78945","idNum":"020252"},"resInt":0}
JSON이 변경된 이유는 Jackson bean serialization이 클래스에 반영되어 getXyz() 메서드와 setXyz() 메서드가 발견되면 이들을 Json 파일명 "xyz" ("Xyz"가 아닌)에 매핑하기 때문입니다.
이 동작을 무효로 하는 방법에는 몇 가지가 있다고 생각합니다.하나는 잭슨 주석 중 하나를 사용하는 것입니다.
이거 드셔보세요
public class Response {
@JsonProperty
private Object ResObj;
@JsonProperty
private int ResInt;
public Object getResObj() {
return ResObj;
}
public int getResInt() {
return ResInt;
}
}
Unrecognized Property Exceptions 문제가 해결됩니다.
public class Response {
public Object ResObj;
public int ResInt;
public Object getResObj() {
return ResObj;
}
public int getResInt() {
return ResInt;
}
}
이를 통해 위의 문제를 해결할 수 있습니다.
잭슨 라이브러리를 사용하여 이 문제를 해결했습니다.여기 제 코드 조각이 있습니다.
**Main Class with JSON String in all lower case:**
public class MainClass {
public static void main(String[] args) throws JsonParseException,
JsonMappingException, IOException {
String jsonStr = "{\r\n" + " \"resObj\": {\r\n" + " \"clientNum\":
\"12345\",\r\n"
+ " \"serverNum\": \"78945\",\r\n" + " \"idNum\":
\"020252\"\r\n" + " },\r\n"
+ " \"resInt\": 0\r\n" + "}";
ObjectMapper mapper = new ObjectMapper();
MyPojo details = mapper.readValue(jsonStr, MyPojo.class);
System.out.println("value of clientNum: " + details.getResObj().getClientNum());
System.out.println("value of getServerNum: " +
details.getResObj().getServerNum());
System.out.println("value of getIdNum: " + details.getResObj().getIdNum());
System.out.println("value of getResInt: " + details.getResInt());
} }
**MyPojo Class:**
public class MyPojo {
private ResObj resObj;
private String resInt;
public ResObj getResObj() {
return resObj;
}
public String getResInt() {
return resInt; } }
**ResObj class:**
public class ResObj {
private String serverNum;
private String idNum;
private String clientNum;
public String getServerNum() {
return serverNum;
}
public String getIdNum() {
return idNum;
}
public String getClientNum() {
return clientNum;
} }
**RESULT**
value of clientNum: 12345
value of getServerNum: 78945
value of getIdNum: 020252
value of getResInt: 0
NOTE: I have removed Setters in classes & there is no effect on the result.
위의 모든 방법을 시도해 보았습니다만, 제 경우는, 이 솔루션 2의 답변대로 동작하는 것은 이것뿐입니다.여기서 활성화했습니다.@EnableWebMvcspring boot 어플리케이션에서 사용합니다.
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Autowired
private ObjectMapper objectMapper;// created elsewhere
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// this will add a 2nd MappingJackson2HttpMessageConverter
converters.add(new MappingJackson2HttpMessageConverter(this.objectMapper));
}
}
ResObj {"ClientNum":12345", ServerNum":78945", IdNum":020252" 내의 정보에 대해 다른 클래스를 정의해야 합니다.그렇지 않으면 잭슨은 역직렬화 방법을 결정할 수 없다.
언급URL : https://stackoverflow.com/questions/23469784/com-fasterxml-jackson-databind-exc-unrecognizedpropertyexception-unrecognized-f
'sourcecode' 카테고리의 다른 글
| Node.js에서 약속과 함께 MongoDB를 사용하는 방법 (0) | 2023.03.04 |
|---|---|
| Mongodb에서 대소문자를 구분하지 않는 쿼리를 작성하려면 어떻게 해야 합니까? (0) | 2023.03.04 |
| 기본 MongoDB 쉘로 예쁘게 인쇄 (0) | 2023.03.04 |
| 무엇을 선택해야 합니까?MongoDB/Cassandra/Redis/CouchDB? (0) | 2023.02.27 |
| 플러그인에서 워드프레스 업로드 파일/이미지 코드를 사용하는 방법 (0) | 2023.02.27 |