잭슨 JSON 필드 맵핑 대문자는?
나는 잭슨이 지도 분야에서 대문자화를 어떻게 다루는지 잘 모르겠다.도와주시면 감사하겠습니다.
{"user":{"username":"user@host.com","password":"pwd","sendercompid":"COMPID","service":{"host":"address","port":6666,"service":"S1","serviceAsString":"s1"}},"MDReqID":"ghost30022","NoRelatedSym":1,"Symbol":["GOOG"],"MarketDepth":"0","NoMDEntryTypes":3,"MDEntryType":["0","1","2"],"SubscriptionRequestType":"1","AggregatedBook":"N"}:
위는 내 아들, 아래는 예외...
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "MDReqID" (class com.myco.qa.fixrest.MarketDataRequest), not marked as ignorable (10 known properties: , "mdreqID", "marketDepth", "user", "subscriptionRequestType", "aggregatedBook", "mdentryType", "symbol", "mdupdateType", "noRelatedSym", "noMDEntryTypes"])
위는 나의 예외이고 아래는 나의 반이다.
public class MarketDataRequest {
private User user;
private String MDReqID;
private char SubscriptionRequestType;
private int MarketDepth;
private int MDUpdateType;
private char AggregatedBook;
private int NoMDEntryTypes;
private ArrayList<Character> MDEntryType;
private int NoRelatedSym;
private ArrayList<String> Symbol;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getMDReqID() {
return MDReqID;
}
public void setMDReqID(String MDReqID) {
this.MDReqID = MDReqID;
}
public char getSubscriptionRequestType() {
return SubscriptionRequestType;
}
public void setSubscriptionRequestType(char subscriptionRequestType) {
SubscriptionRequestType = subscriptionRequestType;
}
...등
setter 메서드가 지정되어 있기 때문에setMDReqID(…)
Jackson은 변수의 이름이mDReqID
Java 명명 규칙이 있기 때문입니다(변수는 소문자로 시작해야 합니다).
대문자를 사용하는 경우는, 다음과 같이 세터(또는 시리얼라이제이션의 경우)의 @Json 속성 주석을 사용합니다.
@JsonProperty("MDReqID")
public void setMDReqID(String MDReqID) {
this.MDReqID = MDReqID;
}
할 수도 있습니다.
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
클래스에서 JSON 메시지의 모든 속성 이름을 대문자로 표시합니다.
더하다@JsonProperty
수신된 JSON 문자열의 속성 이름과 일치하는 세터:
@JsonProperty("MDReqID")
public void setMDReqID(String MDReqID) {
this.MDReqID = MDReqID;
}
추가@JsonProperty
게터에 대한 주석과 출력이 일반적인 형식으로 나타나도록 합니다.
@JsonProperty("mDReqID")
public String getMDReqID() {
return MDReqID;
}
이제 원하는 변수 이름을 지정할 수 있습니다.
private String mdReqID;
이 문제는 다음과 같이 해결합니다.
@Getter
@Setter
static class UserInfo {
//@JsonProperty("UUID")
private String UUID = "11";
private String UserName = "22";
private String userName = "33";
private String user_Name = "44";
private String user_name = "55";
private String User_name = "66";
private boolean HasDeleted=true;
private boolean hasDeleted=true;
private boolean has_Deleted=true;
private boolean has_deleted=true;
private boolean HAS_DELETED=true;
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
String s = objectMapper.writeValueAsString(new UserInfo());
System.out.println(s);
UserInfo userInfo = objectMapper.readValue(s, UserInfo.class);
System.out.println(objectMapper.writeValueAsString(userInfo));
}
출력:
{"UUID":"11","UserName":"22","userName":"33","user_Name":"44","user_name":"55","User_name":"66","HasDeleted":true,"hasDeleted":true,"has_Deleted":true,"has_deleted":true,"HAS_DELETED":true}
시도해 본 후에 나는 같은 문제에 직면했다.UpperCamelCaseStrategy
그러나 이 오류는 여전히 발생했고, 전략은 나의 분야를 만들었다.pContent
ObjectMapper 속성으로Pcontent
모든 필드에 대해 @JsonProperty를 추가하는 것을 원치 않으므로,gson
대신 마침내
Json Naming Annotation을 사용하여 적절한 대소문자로 모든 클래스 필드 이름 가져오기
롬복으로.클래스에 getter 및 setter를 추가하지 않고 자동으로 작동하도록 하는 데이터 주석
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import lombok.Data;
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
@Data
언급URL : https://stackoverflow.com/questions/15303110/jackson-json-field-mapping-capitalization
'programing' 카테고리의 다른 글
[( ! defined ( " ABSPATH " ) ]는 무엇을 의미합니까? (0) | 2023.03.25 |
---|---|
WordPress 페이지 내에서 다른 편집 가능한 섹션을 작성하려면 어떻게 해야 합니까? (0) | 2023.03.25 |
특정 요청에 대해 ajaxStart() 및 ajaxStop()을 사용하지 않도록 설정합니다. (0) | 2023.03.20 |
Type Script:부울을 문자열 값으로 변환 (0) | 2023.03.20 |
스프링 부트 충돌 Bean 정의예외:@Controller 클래스의 주석 지정 빈 이름 (0) | 2023.03.20 |