Spring Boot:当返回的对象为空时,返回一个空的 JSON 而不是空主体

新手上路,请多包涵

我有一个 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 而不是空白响应?像下面这样:

 {}

完整的控制器:

 @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);
    }

原文由 Purport Tees 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

首先,如果您正在使用 @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。

原文由 Moshe Arad 发布,翻译遵循 CC BY-SA 3.0 许可协议

解决方案 1:您必须使用 Serializable 实现您的实体类 解决方案 2:您的类应该有 getter 和 setter 在我的例子中,getter 和 setter 被赋予了受保护的访问修饰符。所以我将它们更改为 public 并且 vola 它起作用了

原文由 Chandu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题