是否可以在运行时动态自定义 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
注释对键名称进行硬编码。这可能吗?
最佳答案
替换Movies
和GenericResponse
与 Map<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/