하나의 옵션은 필드를 추가하는 추가 속성 등으로 수정 : 당신이 JSON 트리 값으로 POJO를 변환 할 수 있습니다 그렇지 않으면
public class MyStuff {
// ... the usual fields, getters and/or setters
@JsonProperty("sum") // or whatever name you need in JSON
private int calculateSumForJSON() {
return 42; // calculate somehow
}
}
:처럼 당신이 뭔가를 할 수 이 속성에 대해 JSON에 쓰기 전에 개체에 설정하십시오. JSON을 쓰는 동안이 게터를
public String getFullName() {
return getFirstName() + " " + getLastName();
}
와 일치 필드가 없다하더라도 잭슨이 자동으로 호출합니다 : 두 번째 옵션은 속성이 다른 개체 속성에서 계산 될 수 있다면 당신은 예를 들어,에 대한 게터를 추가 할 수 있습니다 JSON 출력에 fullName
으로 표시됩니다. 그 세 번째 옵션이 작동하지 않을 경우지도에 개체를 변환 한 다음 필요하지만이를 조작하는 것입니다
ObjectMapper mapper //.....
MyObject o //.....
long specialValue //.....
Map<String, Object> map = mapper.convertValue(o, new TypeReference<Map<String, Object>>() { });
map.put("specialValue", specialValue);
당신이있는 거 문제는 비 정렬 언급하지 않았다하지만 당신은뿐만 아니라 그렇게해야하는 경우 첫 번째 옵션은 잘 작동하지만 두 번째 옵션은 약간의 조정이 필요합니다.
그리고
여분 필드의 책임을 직렬화되는 오브젝트의 일부가 아닌 경우 작동하지 않습니다
@JsonView
이 것이 작업 같은 소리 같은 객체의 다른 필드를 작성하는 등. 예 : 개체의 URL ... 개체의 직업이 자신의 주소임을 아는 것이 아니라 상위 계층의 작업입니다. – cdeszaq
꽤 그렇긴하지만 동일한 JSON 객체로 직렬화 된 이유는 무엇입니까? JSON 페이로드의 잠재적으로 나쁜 디자인 인 것처럼 들립니다. 부여 된 JSON은 데이터 사이에 단순한 구분이 없다는 문제가 있지만 메타 데이터 (이름 지정 규칙이 생길 수 있음) – StaxMan
내부 객체 표현은 외부 리소스 표현과 동일하지 않습니다 (Accepts 헤더에 따라 변경해야 할 수도 있음) . 자원이 살아있는 URL 또는 주소는 변경 될 수 있으며 내부 객체의 책임이 아니라 라우트 또는 다른 상위 계층의 책임입니다. – cdeszaq