我正在使用以下可用服务创建一个RESTFul网络服务:
@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);
}当空列表返回时,我在浏览器中得到以下响应:
[]如何在浏览器中接收"null“响应而不是[]?有什么方法可以告诉Spring将我的列表大小0呈现为"null“而不是[]?
发布于 2017-10-03 10:16:41
根据genericModelList是否为空或not来旋转它的一种方法是:-
if(genericModelList.isEmpty()) {
return new ResponseEntity<>(null, headers, HttpStatus.OK);
} else {
return new ResponseEntity<>(genericModelList, headers, HttpStatus.OK);
}或者,您也可以使用ResponseEntity(MultiValueMap headers, HttpStatus status)构造函数跳过body。
发布于 2017-10-03 10:19:58
因为您只是将genericModelList初始化为的空列表,而不是null。或者您可以在发送不同body的响应之前检查列表的大小。
发布于 2017-10-05 01:04:55
谢谢大家,下次我会尽量讲得更清楚。我解决了这个问题。
当我的列表大小为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“。
https://stackoverflow.com/questions/46536208
复制相似问题