java - SerializationFeature.WRAP_ROOT_VALUE 作为 jackson json 中的注释

标签 java json serialization jackson

有没有办法将 SerializationFeature.WRAP_ROOT_VALUE 配置为根元素上的注释,而不是使用 ObjectMapper

例如我有:

@JsonRootName(value = "user")
public class UserWithRoot {
    public int id;
    public String name;
}

使用 ObjectMapper:

@Test
public void whenSerializingUsingJsonRootName_thenCorrect()
  throws JsonProcessingException {
    UserWithRoot user = new User(1, "John");

    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
    String result = mapper.writeValueAsString(user);

    assertThat(result, containsString("John"));
    assertThat(result, containsString("user"));
}

结果:

{
    "user":{
        "id":1,
        "name":"John"
    }
}

有没有办法将此 SerializationFeature 作为注释而不是 objectMapper 上的配置?

使用依赖:

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.7.2</version>
</dependency>

最佳答案

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test2 {
    public static void main(String[] args) throws JsonProcessingException {
        UserWithRoot user = new UserWithRoot(1, "John");

        ObjectMapper objectMapper = new ObjectMapper();

        String userJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);

        System.out.println(userJson);
    }

    @JsonTypeName(value = "user")
    @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
    private static class UserWithRoot {
        public int id;
        public String name;
    }
}

@JsonTypeName@JsonTypeInfo 共同使之成为可能。

结果:

{
  "user" : {
    "id" : 1,
    "name" : "John"
  }
}

关于java - SerializationFeature.WRAP_ROOT_VALUE 作为 jackson json 中的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882478/

相关文章:

java - 如何根据 selectOneMenu 的当前选择验证 selectManyCheckbox 的最大选中值数量?

java - 无法实例化 Queue 类型。为什么是这样?

javascript - 如何向此 Javascript 添加 if/else 语句?

java - 如何在java程序中反序列化由protobuf-net序列化的数据

java - 如何使用 JSON-B 将 JSON 字符串反序列化为非公共(public)类?

java - 从文件而不是单词加载数字

javascript - Grails JSONObject解析问题

ruby - 何时在 Ruby 的 JSON 库中使用转储与生成与 to_json 以及加载与解析?

使用 Boost 对复杂数据进行 C++ 序列化

c# - 在 C# 中序列化、压缩和加密