잭슨을 사용하여 내 객체를 json으로 변환하고 있습니다. 객체에는 2 개의 필드가 있습니다.
@Entity
public class City {
@id
Long id;
String name;
public String getName() { return name; }
public void setName(String name){ this.name = name; }
public Long getId() { return id; }
public void setName(Long id){ this.id = id; }
}
jQuery 자동 완성 기능과 함께 이것을 사용하고 싶기 때문에 ‘id’는 json에서 ‘value’로 나타나고 ‘name’은 ‘label’로 나타납니다. 잭슨의 문서는 이에 대한 명확하지 않습니다와 나는 내가 필요하지 않습니다하지만 난 얻을 수없는 것처럼, 심지어 원격으로 보인다 모든 주석을 해봤 name
로 표시 label
하고 id
로 표시 value
json으로한다.
이 작업을 수행하는 방법 또는 가능한지 아는 사람이 있습니까?
답변
@JsonProperty를 사용해 보셨습니까?
@Entity
public class City {
@id
Long id;
String name;
@JsonProperty("label")
public String getName() { return name; }
public void setName(String name){ this.name = name; }
@JsonProperty("value")
public Long getId() { return id; }
public void setId(Long id){ this.id = id; }
}
답변
이 있음을주의 org.codehaus.jackson.annotate.JsonProperty
잭슨 1.x에서와 com.fasterxml.jackson.annotation.JsonProperty
잭슨 2.x 또는 3.0에 사용중인 ObjectMapper (버전에 상관없이)를 확인하고 올바른 주석을 사용해야합니다.
답변
필드 이름을 바꾸는 옵션이 하나 더 있습니다.
잭슨 믹스 인 .
주석을 달 수없는 타사 클래스 를 처리 하거나 Jackson 특정 주석으로 클래스를 오염시키지 않으려는 경우에 유용합니다 .
Mixins에 대한 Jackson 문서는 구식이므로이 예 는 더 명확합니다. 본질적으로 : 원하는 방식으로 직렬화를 수행하는 mixin 클래스를 만듭니다. 그런 다음 ObjectMapper에 등록하십시오.
objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);
답변
잭슨
Jackson을 사용하는 경우 @JsonProperty
주석을 사용하여 지정된 JSON 특성의 이름을 사용자 정의 할 수 있습니다 .
따라서 엔티티 필드에 주석으로 주석을 달고 다음 @JsonProperty
과 같이 사용자 정의 JSON 특성 이름을 제공해야합니다.
@Entity
public class City {
@Id
@JsonProperty("value")
private Long id;
@JsonProperty("label")
private String name;
//Getters and setters omitted for brevity
}
JavaEE 또는 JakartaEE JSON-B
JSON-B는 Java 객체와 JSON 간의 변환을위한 표준 바인딩 레이어입니다. JSON-B를 사용하는 경우 @JsonbProperty
주석을 통해 JSON 특성 이름을 대체 할 수 있습니다 .
@Entity
public class City {
@Id
@JsonbProperty("value")
private Long id;
@JsonbProperty("label")
private String name;
//Getters and setters omitted for brevity
}