![](/img/trans.png)
[英]Empty json object instead of null, when no data -> how to deserialize with gson
[英]Spring Boot: Return a empty JSON instead of empty body when returned object is null
我有一個 RestController,當我調用該方法時:
@RequestMapping(value = "/sigla/{sigla}")
@ResponseBody
public PaisDTO obterPorSigla(@PathVariable String sigla) {
return service.obterPorSigla(sigla);
}
如果找到記錄,我會得到一個很好的 JSON 響應:
{"nome":"Brasil","sigla":"BR","quantidadeEstados":27}
但是當在數據庫中找不到任何內容時,RestController 返回 null 並且我得到一個空的響應,完全是空白的主體。
如何顯示空的 JSON 而不是空白響應? 像下面這樣:
{}
完成 Controller:
@RestController
@RequestMapping("/pais")
public class PaisController {
@Autowired
private PaisService service;
@RequestMapping
public ResponseEntity<List<PaisDTO>> obterTodos() {
return CreateResponseEntity.getResponseEntity(service.obterTodos());
}
@RequestMapping(value = "/sigla/{sigla}", method = RequestMethod.GET, consumes="application/json", produces="application/json")
public ResponseEntity<PaisDTO> obterPorSigla(@PathVariable String sigla) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
PaisDTO paisDTO = service.obterPorSigla(sigla);
if(paisDTO != null) return new ResponseEntity<PaisDTO>(paisDTO, headers, HttpStatus.OK);
else return new ResponseEntity<PaisDTO>(headers, HttpStatus.OK);
}
首先,如果您使用@RestController
批注,則不需要@ResponseBody
批注,請擺脫它。
其次,如果您嘗試使用 REST 控制器,那么您會遺漏一些東西,請這樣做:
@RequestMapping(value = "/sigla/{sigla}", method = RequestMethod.GET, consumes = "application/json", produces="application/json")
public ResponseEntity<PaisDTO> obterPorSigla(@PathVariable String sigla) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
PaisDTO paisDTO = service.obterPorSigla(sigla);
if(paisDTO != null) return new ResponseEntity<>(paisDTO, headers, HttpStatus.OK);
else return new ResponseEntity<>(headers, HttpStatus.OK);
}
在上面的示例中,如果您將獲得 null,那么您將返回一個空的響應 JSON。
我能找到的唯一方法是創建一個空類
@JsonSerialize
public class EmptyJsonBody {
}
然后將此添加到您的回復中
@PostMapping(value = "/sigla/{sigla}")
public ResponseEntity obterPorSigla(@PathVariable String sigla) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
PaisDTO paisDTO = service.obterPorSigla(sigla);
ResponseEntity.BodyBuilder responseBuilder = ResponseEntity.ok().headers(headers);
if(paisDTO != null) {
return responseBuilder.body(paisDTO);
} else {
return responseBuilder.body(new EmptyJsonBody());
}
}
解決方案 1:您必須使用 Serializable 實現實體類 解決方案 2:您的類應該具有 getter 和 setter 在我的情況下,getter 和 setter 被賦予了受保護的訪問修飾符。 所以我把它們改成 public 和 vola 它起作用了
我按照 marcos almedia 的建議使用它..但我得到 java object 哈希碼響應而不是 json 空 {} 響應
@JsonSerialize 公共 class EmptyJsonBody {}
我們如何解決它?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.