java createlineborder Jackson이 주석을 사용하여 부가적인 배치를 추가하도록합니다.




java swing border (4)

json이 message 대문자를 가지는 것을 꺼려한다면, 가장 간단한 방법은 클래스에 @JsonTypeInfo 를 주석으로 추가하는 것입니다.

추가 할 항목 :

@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
public class Message {
  // ...
}

{"Message":{"text":"Text"}}

저는 다음과 같은 수업을 듣습니다 :

public class Message {
    private String text;

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }    
}

기본적으로 Jackson을 사용하여 인스턴스를 JSON으로 변환 할 때 나는 다음을 얻는다.

{"text":"Text"}

나는 다음과 같이하고 싶다 :

{"message":{"text":"Text"}}

내 목표를 달성하는 데 사용할 수있는 JAXB / Jackson 주석이 있습니까?

이 문제를 해결하기 위해 클래스를 다른 클래스로 래핑 할 수 있습니다.

public class MessageWrapper {
    private Message message;

    public Message getMessage() {
        return message;
    }

    public void setMessage(Message message) {
        this.message = message;
    }
}

또는보다 일반적인 해결책 :

public class JsonObjectWrapper<T> {
    /**
     * Using a real map to allow wrapping multiple objects
     */
    private Map<String, T> wrappedObjects = new HashMap<String, T>();

    public JsonObjectWrapper() {
    }

    public JsonObjectWrapper(String name, T wrappedObject) {
        this.wrappedObjects.put(name, wrappedObject);
    }

    @JsonAnyGetter
    public Map<String, T> any() {
        return wrappedObjects;
    }

    @JsonAnySetter
    public void set(String name, T value) {
        wrappedObjects.put(name, value);
    }
}

다음과 같이 사용할 수 있습니다.

Message message = new Message();
message.setText("Text");
JsonObjectWrapper<Message> wrapper = new JsonObjectWrapper<Message>("message", message);

내 목표를 달성하는 데 사용할 수있는 JAXB / Jackson 주석이 있습니까?

감사.


레이블이 붙은 객체로 클래스를 래핑한다는 간단한 목표를 위해 사용자 정의 직렬화를 작성해야한다는 것을 알게되어 슬 was습니다. 커스텀 시리얼 라이저를 작성하면서 놀아본 후, 가장 간단한 해결책은 일반 래퍼 (wrapper)라고 결론을 내렸다. 위의 예제를 좀 더 단순하게 구현 한 것입니다.

public final class JsonObjectWrapper {
    private JsonObjectWrapper() {}

    public static <E> Map<String, E> withLabel(String label, E wrappedObject) {
        HashMap<String, E> map = new HashMap<String, E>();
        map.put(label, wrappedObject);
        return map;
    }
}

spring을 사용하는 경우 application.properties 파일에서 다음을 추가하십시오.

spring.jackson.serialization.WRAP_ROOT_VALUE = true

그리고 직렬화하고자하는 클래스에서 @JsonRootName 어노테이션을 사용하십시오. 예

@JsonRootName("user")
public class User {
    private String name;
    private Integer age;
}

더 간단하고 나은 방법 :

@JsonRootName(value = "message")
public class Message { ...}

다음 사용
new ObjectMapper().configure(SerializationFeature.WRAP_ROOT_VALUE, true).writeValueAs...





jackson