在Spring RestController中将POJO显式转换为JSON的最佳方法



我在 Spring 引导项目中有一个现有的 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 序列化。它应该对将来可能发生的任何配置更改具有鲁棒性。

谢谢。

在控制器中添加属性ObjectMapper,使用依赖关系注入获取它,然后使用 :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;
}

如果它不起作用,请告诉我。