java - Jackson 可以使用可自定义的键名序列化为 JSON 吗?

标签 java json jackson

是否可以在运行时动态自定义 JSON 响应中的键名称,而不是为域级对象创建单独的 POJO 类?

我正在使用带有 Web Starter 的 Spring Boot 1.5.3,因此包含 Jackson 依赖项。我正在返回 JSON 格式的响应。通常,如果我需要自定义键名称,我会使用 Jackson 注释创建单独的 POJO 类。例如,

public class Movies {

    private List<String> movies;

    public Movies(List<String> movies) {
        this.movies = movies;
    }

    public List<String> getMovies() {
        return this.movies;
    }

    public void setMovies(List<String> movies) {
        this.movies = movies;
    }
}

当我使用以下代码从 @RestController 返回此值时:

@RestController
public class MoviesController {

    @Service
    private MovieService movieService;

    @RequestMapping("/movies/list")
    public ResponseEntity<Movies> getMovies() {
        return new ResponseEntity<Movies>(this.movieService.getMovies(), HttpStatus.OK);
    }
}

调用此端点时我收到 JSON 响应:

{ "movies" : [ "Iron Man", "Spiderman", "The Avengers", "Captain America" ] }

我不想创建电影 POJO。相反,我想要一个泛型类型的 POJO:

public class GenericResponse {

   @JsonProperty("movies") // <- this needs to be dynamic
   private List<String> data;
   ...
}

...我可以在实例化 GenericResponse 时以某种方式发送我想要的任何键名称,而不是通过 @JsonProperty 注释对键名称进行硬编码。这可能吗?

最佳答案

替换MoviesGenericResponseMap<String, List<String>> ,然后执行

map.put("movies", Arrays.asList("Iron Man", "Spiderman", "The Avengers", "Captain America"));

一个Map被序列化为 JSON 作为 JSON 对象,其中映射键作为字段名称,以及映射值和字段值。

关于java - Jackson 可以使用可自定义的键名序列化为 JSON 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43932043/

相关文章:

c# - 游戏服务器语言选择

java - Servlet 中 JSON 的解析器就像 XML 的 SAX 一样

php - 为什么我无法以 json 形式访问

php - Instagram 实时更新标签 - 获取空数据,为什么?

java - 解析和映射具有动态属性的 JSON 对象

java - 将 Json 反序列化为包含通用对数组的 Java 实体

java - 使用 if 语句计算水的物质状态?

java - 如何检索已存储在 firebase 数据库中并在回收器 View 中显示的图像?

java - 以 '/' 字符作为 JSON 键的 Jackson ObjectMapper

java - 通过 kubernetes 和 helm 将单个 docker 镜像部署为 2 个不同的服务。更改应用程序的上下文路径