在 ResponseEntity 正文中返回 null (Spring Boot RESTful)
Posted
技术标签:
【中文标题】在 ResponseEntity 正文中返回 null (Spring Boot RESTful)【英文标题】:Return null in ResponseEntity body (Spring Boot RESTful) 【发布时间】:2018-03-14 03:44:29 【问题描述】:我正在创建一个具有以下可用服务的 RESTFul Web 服务:
@RequestMapping(value = "/test", produces = "application/json", method = RequestMethod.GET)
public ResponseEntity<List<GenericModel>> returnEmpty()
List<GenericModel> genericModelList = new ArrayList<>();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
return responseEntity = new ResponseEntity<>(genericModelList, headers, HttpStatus.OK);
当空列表返回时,我在浏览器中得到以下响应:
[]
如何在浏览器中接收“空”响应而不是 []?有一些方法可以告诉 Spring 将我的列表大小 0 呈现为“null”而不是 []?
【问题讨论】:
为什么不将其初始化为null
?
如果它应该是一个列表,为什么不返回空列表呢?这不需要您的客户提供特殊情况。
抱歉,混淆了。我想要的是在响应正文中返回一个“null”。如果我这样做: return new ResponseEntity(null, headers, HttpStatus.OK) 浏览器显示一个空白页面,我想显示“null”。
【参考方案1】:
一种基于genericModelList
是否为空的方法可能是:-
if(genericModelList.isEmpty())
return new ResponseEntity<>(null, headers, HttpStatus.OK);
else
return new ResponseEntity<>(genericModelList, headers, HttpStatus.OK);
否则您也可以使用ResponseEntity(MultiValueMap<String,String> headers, HttpStatus status)
构造函数跳过body
。
【讨论】:
当我跳过正文时,浏览器显示一个空白页面,没有内容正文。我想在正文中显示“null”。我正在使用 JQuerey Ajax 请求来访问这些数据,并且我希望它能够比较结果 == null。如果正文为空白,我会收到一个错误,因为它不是有效的 JSON。 @HélioMárcioFilho 您可以在答案中使用突出显示的代码。跳过正文只是一种替代方法,因为在回答之前我对您的用法了解不多。因此在答案中放置了一个 or else。【参考方案2】:因为您只是将 genericModelList
初始化为 empty 列表,而不是 null。或者您可以在使用不同的正文发送响应之前检查列表的大小。
【讨论】:
我这样做是因为我不能返回一个空列表。我已经尝试返回一个空列表。【参考方案3】:谢谢大家,下次我会尽量说清楚。我解决了这个问题。
当我的列表大小为 0 时,我试图在 ResponseEntity 的正文中发送“null”,但 Jackson 创建了一个“[]”JSON,而不是我想要的“null”。我没有找到改变这种默认 Jackson 行为的方法,所以我决定放弃 Jackson 并使用 Gson 库。
让我展示一个我的解决方案示例:
@RequestMapping(value = "/test", produces = "application/json", method = RequestMethod.GET)
public ResponseEntity<String> returnEmpty()
List<GenericModel> genericModelList = new ArrayList<>();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
String body = "";
if (genericModelList.size() == 0)
body = "null";
else
body = gson.toJson(genericModelList);
return responseEntity = new ResponseEntity<>(body, headers, HttpStatus.OK);
这样,返回一个字符串并使用 Gson 自己解析为 JSON,而不是使用 Spring/Jackson 的自动解析,我可以控制生成的 JSON。如果我的 List.size() == 0,请看我明确返回一个字符串“null”。
【讨论】:
以上是关于在 ResponseEntity 正文中返回 null (Spring Boot RESTful)的主要内容,如果未能解决你的问题,请参考以下文章
缺少所需的请求正文:public org.springframework.http.ResponseEntity<..model.Customer>
如何在 ResponseEntity 中返回已创建状态 (201 HTTP)