在ResponseEntity主体中返回null(Spring Boot RESTful)

时间:2017-10-03 02:09:16

标签: java spring rest web-services spring-boot

我正在使用以下服务创建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);
}

当空列表返回时,我在浏览器中收到以下响应:

[]

如何在浏览器中接收“null”响应而不是[]?有一些方法可以告诉Spring将列表大小0渲染为“null”而不是[]?

3 个答案:

答案 0 :(得分:2)

根据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

答案 1 :(得分:1)

因为您只是将@media (max-width: 767px) { #header-inner a img { height: auto; } } 初始化为列表,而不是null。或者,您可以在向不同机构发送回复之前检查列表的大小。

答案 2 :(得分:0)

谢谢大家,下次我会更加清楚。我解决了这个问题。

我试图发送&#34; null&#34;在我的ResponseEntity&gt;的主体中;当我的列表大小为0时,杰克逊创建了一个&#34; []&#34; JSON而不是&#34; null&#34;我想要的。我没有找到改变杰克逊默认行为的方法,所以我决定放弃杰克逊并使用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);
}

这样,返回一个String并使用Gson自己解析为JSON而不是使用Spring / Jackson的自动解析,我可以控制生成的JSON。看看我明确地返回一个String&#34; null&#34;如果我的List.size()== 0。