【问题标题】:How to format returned json in Spring Boot REST API?如何在 Spring Boot REST API 中格式化返回的 json?
【发布时间】:2021-05-16 11:31:25
【问题描述】:

我使用 Spring Boot 创建了以下 REST API。

@RestController
public class PersonController {
    
    @Autowired
    private PersonRepository PersonRepository;
    
    @PostMapping(value="/Person", produces = "application/json")
    public ResponseEntity<Person> addPerson(@RequestBody Person Person){
        
        Person newPerson = PersonRepository.save(Person);       
        
        return new ResponseEntity<Person>(newPerson, HttpStatus.OK) ;
    }

}

在 Postman 中我选择:

POST > http://localhost:8080/person > json

然后在正文字段中,我放置以下 json 并点击发送:

{"id":"", "name":"john", "age":"40", "email":"test@test.com"}

这是我得到的回报:

{
    "name": "john",
    "age": 40,
    "email": "test@test.com",
    "_links": {
        "self": {
            "href": "http://localhost:8080/person/10"
        },
        "person": {
            "href": "http://localhost:8080/person/10"
        }
    }
}

但是,我希望 json 以这种其他格式返回:

{
    "id": 10,
    "name": "john",
    "age": 40,
    "email": "test@test.com"
}

怎么做?

【问题讨论】:

    标签: java json spring-boot api rest


    【解决方案1】:

    看起来您也在使用 SpringDataRest,它根据您的实体公开 _links 等。我猜 SpringDataRest 的控制器是在您的请求中调用的,而不是您的自定义端点。尝试在您的控制器方法中记录一些内容以确保它被实际调用。 如果您的服务的另一部分不需要 SpringDataRest,则应删除依赖项。

    【讨论】:

      【解决方案2】:

      我刚刚发现了问题。

      在控制器中的代码是:

      @PostMapping(value="/person"....
      

      当我在邮递员的时候:

      http://localhost:8080/persons
      

      (以字母s结尾)

      因此它从未进入控制器方法。

      当我从邮递员调用中删除 s 时,它可以正常工作并以我想要的方式返回 json。

      现在...

      有趣的是,当使用字母s调用时,它确实保存到db并返回json,即使映射不正确。

      所以我决定在调试模式下运行(使用不正确的映射)并注意到它没有进入方法。

      这很奇怪。如何正确保存并返回 json?

      然后我决定注释掉所有方法并再次在邮递员上运行调用。

      它再次将 json 保存到数据库并以第一种格式返回 json。

      所以这似乎是在幕后以某种方式完成的,肯定不是通过我创建的方法。

      【讨论】:

        猜你喜欢
        • 2017-06-27
        • 1970-01-01
        • 2016-08-03
        • 2016-09-19
        • 1970-01-01
        • 2017-10-13
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多