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

标签 java spring-boot jackson

我在 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/

相关文章:

java - 使用 Jacorb 的 CXF Corba

java - 如何在 spring boot 中使用 @Async 和 @Scheduled 注解?

java - 当我希望执行插入查询时使用 Spring JPA 发布请求

java - Jackson mixins 抛出 stackoverflow 错误

java - 将多个 json 结果转换为可迭代

java - 斐波那契螺旋 - Robocode

java - Log4j2 - 配置 RolloverStrategy 以删除旧日志文件

java - 如何从android中的webview获取url中存在的值?

java - 在多个 JSP 页面中添加 ArrayList

java - 让 JsonIgnore 或 JsonIgnoreProperties 在 servlet 过滤器上工作