为什么我无法将正确的服务器状态作为响应发送,而是当我点击我的端点时得到“无响应”?

时间:2018-02-23 07:59:56

标签: java spring spring-mvc

我正在测试一个应该返回JSON的端点。

效果很好。但是当存在异常(如禁止)时,它应该返回正确的错误代码和消息。

现在我这样做:

@ResponseBody
@GetMapping(produces = APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity getInfo() {
    try{
        //..do something
    }catch(Exception e){

        return new ResponseEntity<>("Error calculating the required information", null, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

相反,当我卷曲网址或招摇时,我得到了这个:

Request URL
http://localhost:8081/info
Request Headers
{
  "Accept": "application/json;charset=UTF-8"
}
Response Body
no content
Response Code
0
Response Headers
{
  "error": "no response from server"
}

是的,我正在点击端点(我调试了它)。

知道为什么这个回复会回来吗? 感谢。

2 个答案:

答案 0 :(得分:1)

您需要更改方法标志

public ResponseEntity<Void> getInfo() {

并使用

更改返回类型
return new ResponseEntity<Void>(HttpStatus.INTERNAL_SERVER_ERROR);

如果要返回特定消息,则需要创建自定义异常类。

您可以在github上找到以下项目链接的示例:https://github.com/in28minutes/spring-microservices/tree/master/02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices

答案 1 :(得分:0)

您可以像这样更改代码

@ResponseBody
@GetMapping(produces = APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<String> getInfo() {
    try {
        //..do something
    } catch(Exception e) {

        return new ResponseEntity<>("Error calculating the required information", null, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

ResponseEntity代码的定义是这样的。

public ResponseEntity(T body, MultiValueMap<String, String> headers, HttpStatus status) 

您必须匹配通用类型。

有趣的是我制作了相同的代码,并且效果很好。 (响应正文返回500错误)