잭슨이 변수 이름의 대소문자를 변경하지 못하도록 합니다.
저는 봄에 잭슨을 이용하여 JSON에 제 수업을 연재하고 있습니다.아래 예시와 같은 클래스를 직렬화하면 잭슨은 특정 필드의 이름을 Camel Case에서 소문자로 변경하고 있습니다.사용자 지정(비) 직렬화 프로그램을 만들어 이 문제를 해결할 수 있다는 것을 알고 있지만, 이 기능을 전체적으로 해제하기를 희망합니다.application.properties에서 속성을 설정하면 됩니다.
기본 Jackson 명명 전략에 따라 이 작업은 수행되지 않습니다.
등록된 사용자 지정 전략이 없는 경우 기본 Java 속성 이름 지정 전략이 사용되며 필드 이름은 그대로 유지됩니다.
class Foo {
private final String firstName;
private final String aName;
private final String name;
private final String abName;
Foo(final String firstName, final String aName, final String name, final String abName) {
this.firstName = firstName;
this.aName = aName;
this.name = name;
this.abName = abName;
}
// Getters here
}
public static void main(String[] args) {
final ObjectMapper mapper = new ObjectMapper();
final Foo foo = new Foo("first", "a", "name", "ab");
final String jsonInString = mapper.writeValueAsString(foo);
System.out.println(jsonInString);
}
예상:
{"firstName":"first",name":"name",abName":"ab",aName":"a"}
실제:
{"firstName":"first",name":"name",abName":"ab",anname":"a"}
편집:
문제를 이해하는 사람들의 해석으로 좁혔습니다.잭슨의 벌레처럼 보이기 시작했습니다.
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getaName() {
return this.aName;
}
}
일련 번호:{"aName":"a"}
하지만,
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getAName() {
return this.aName;
}
}
일련 번호:{"aname":"a"}
여기서 문제는 JavaBeans(TM) 사양에 대한 것입니다.사양에 따라(58페이지)
그러나 모든 대문자 이름을 가끔 사용할 수 있도록 이름의 처음 두 문자가 모두 대문자인지 확인하고 그대로 둡니다.
"FooBah"는 "FooBah"가 됩니다.
"Z"가 "z"가 됨
"URL"이 "URL"이 됩니다.
그리고 당신은 유리한 케이스를 가지고 있습니다.aName
필드. 왜냐하면 만약 게터가 다음과 같이 보인다면.AName()
그러면 당신이 이 게터에서 다시 변환할 때 당신은 찾아야 합니다.AName
필드를 지정합니다.다음은 추가 정보 설명입니다.
그래서 이것을 고치기 위해, 당신은 적절한 getter를 사용할 수 있습니다.getaName()
) 또는@JsonProperty("aName")
필드 위의 주석
잭슨이 왜 책을 읽는지는 모르겠지만,getAName
로.aname
잭슨이 특정 이름을 사용하도록 강제할 수 있습니다.@JsonProperty("AName")
예:
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
@JsonProperty("AName")
public String getAName() {
return this.aName;
}
}
(이와 밀접하게 관련된 질문에서 이 솔루션을 얻었습니다.)
개체 맵에서 속성 명명 전략 옵션을 사용할 수도 있습니다.
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)
언급URL : https://stackoverflow.com/questions/46652019/stop-jackson-from-changing-case-of-variable-names
'programing' 카테고리의 다른 글
@EnableJpa* 주석을 사용한 Spring @WebMvcTest (0) | 2023.06.23 |
---|---|
alloca()는 메모리 레벨에서 어떻게 작동합니까? (0) | 2023.06.23 |
Excel 스프레드시트에서 장고 모델로 데이터 가져오기 (0) | 2023.06.23 |
mysqladmin을 사용하여 데이터베이스 문자 집합을 설정하는 데 문제가 발생했습니다. (0) | 2023.06.23 |
워드프레스에서 대기열에 있는 스크립트 목록을 가져오시겠습니까? (0) | 2023.06.23 |