请求正常时如何返回json对象,SpringBoot失败时如何返回json错误对象

Posted

技术标签:

【中文标题】请求正常时如何返回json对象,SpringBoot失败时如何返回json错误对象【英文标题】:How to return an json object when request is OK, and a json error object when failing in SpringBoot 【发布时间】:2020-10-16 19:46:04 【问题描述】:

我有一个方法:

@RequestMapping(value = "/Commande", method = RequestMethod.GET)
public String authorizeMeter(...)
    try 
        MyObject result = port.commanderCollectePublicationMesures(demande);
     catch (Erreur erreur) 
        return erreur;
    

当请求成功时,我会得到一个 MyObject 结果,当我捕捉到错误时,和 Erreur Object。

最后,两个响应都会被序列化,所以,都是JSON。

如果我输入:String 返回类型,编译器不喜欢这样说,我必须返回 MyObject 类型或 Erreur 类型

如果我只有一种类型( MyObject ),Springboot 会自动将其序列化为 JSON,这很棒。

但是我应该如何管理 Erreur 消息?

我是否应该始终将对象转换为 JSON?

【问题讨论】:

【参考方案1】:

您可以添加ResponseEntity 作为返回类型(org.springframework.http.ResponseEntity)

return 语句应该是

return ResponseEntity.ok(result)

return ResponseEntity.ok(erreur)

【讨论】:

【参考方案2】:

Yogesh Prajapati 答案是正确的。但是在错误情况下,我想使用另一个状态码,因为ResponseEntity.ok(..) 返回 200 状态码,这在错误的情况下不好,你可以使用一个优雅的解决方案来解决这个问题:

return ResponseEntity.badRequest().body(error);

或使用其他HttpStatus 你可以这样称呼:

return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);

【讨论】:

以上是关于请求正常时如何返回json对象,SpringBoot失败时如何返回json错误对象的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoo后台GET请求接口数据,并保存到数据库

JSON 返回嵌套数组而不是对象 [Spring boot + JPA + MySQL + REST]

如何使用一个ajax请求从java servlet返回多个json对象

如何在 django 的 AJAX 请求中返回多个 JSON 对象

如何在调用webserver的时候直接返回一个json的数据

JSON 解析错误:缺少对象成员的名称