簡體   English   中英

如何在 Spring 引導 REST ZDB974238714CA8DE634A7CE1D083A14F 中格式化返回的 json?

[英]How to format returned json in Spring Boot REST API?

我使用 Spring 引導創建了以下 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 I select 中:

發布 > 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"
}

怎么做?

看起來您也在使用 SpringDataRest,它根據您的實體公開 _links 等。 我猜您的請求中調用了來自 SpringDataRest 的 controller,而不是您的自定義端點。 嘗試在您的 controller 方法中記錄一些內容,以確保它被實際調用。 如果您的服務的另一部分不需要 SpringDataRest,則應刪除依賴項。

我剛剛發現了問題。

在 controller 中,代碼為:

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

在 postman 我打電話給:

http://localhost:8080/persons

(以字母 s 結尾)

結果它從未進入 controller 方法。

當我從 postman 調用中刪除 s 時,它可以正常工作並按照我想要的方式返回 json。

現在...

有趣的是,當使用字母 s 調用時,它確實保存到數據庫並返回 json,即使映射不正確。

所以我決定在調試模式下運行(使用不正確的映射)並注意到它沒有進入方法。

那很奇怪。 它如何正確保存並返回 json?

然后我決定注釋掉所有方法並再次在 postman 上運行調用。

它再次將 json 保存到數據庫並以第一種格式返回 json。

所以似乎這是在幕后以某種方式完成的,肯定不是通過我創建的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM