我在 Spring Boot 项目中有一个现有的 REST API,看起来有点像这样:
@GetMapping(value = "/api/projects")
public List<Project> getProjects() {
List<Project> projects = projectsRepository.findAll();
List<Project> processed = processProjects(projects);
return processed;
}
调用此方法时,返回的 JSON 响应如下所示:
{
"JSON":"[
{
"id":"aaa",
"simple":"SYMBOLIC_VALUE_BBB",
"nested1":{
"field1":"SYMBOLIC_VALUE_C1",
"field2":"nonSymbolicValueC2",
"field3":"SYMBOLIC_VALUE_C3"
},
"nested2":{
"fieldA":"SYMBOLIC_VALUE_DDD"
}
},
...
]",
"mode":"application/json"
}
符号值在前端被翻译成人类可读的形式。一切正常。但现在我还需要此方法的第二个版本,它可以在后端进行翻译。像这样的事情:
@GetMapping(value = "/api/v2/projects")
public String getProjects() {
List<Project> projects = projectsRepository.findAll();
String projectsAsJson = ???
String processedJson = processProjectsJson(projectsAsJson);
return processedJson;
}
三个问号 (???) 的位置应该放什么?我想使用 Spring 框架自动使用的相同 json 序列化。它应该能够抵御 future 可能发生的任何配置更改。
非常感谢。
最佳答案
在你的Controller中添加一个属性ObjectMapper
,使用依赖注入(inject)来获取它,然后使用:mapper.writeValueAsString(myObject);
类似的事情:
@Autowired
private ObjectMapper mapper;
@GetMapping(value = "/api/v2/projects")
public String getProjects() {
List<Project> projects = projectsRepository.findAll();
String projectsAsJson = mapper.writeValueAsString(projects);
String processedJson = processProjectsJson(projectsAsJson);
return processedJson;
}
如果它不起作用,请告诉我。
关于java - 在 Spring RestController 中显式将 POJO 转换为 JSON 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60077359/