spring启动rest控制器错误消息始终为空

ygya80vv  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(350)

这个问题在这里已经有了答案

错误响应spring boot中的“message”字段为空(1个答案)
16天前关门了。
当调用rest控制器并导致抛出错误时,spring boot返回一个json错误对象。但是我的问题是 message 字段始终为空,即使我向异常提供消息也是如此。错误响应json如下所示:

{
    "timestamp": "2020-12-23T21:44:30.077+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "message": "",
    "path": "/v1/example"
}

在我的代码中,我抛出了如下异常:

throw new RuntimeException("HELLO!");

但是字符串msg参数从未出现在响应中。
我知道我可以编写自己的错误处理程序,我正在这样做。但是,如果发生了一个我没有准备或处理的错误,我想让错误消息出现在响应中,这有什么意义呢 message 如果不是这样的话?

vc9ivgsu

vc9ivgsu1#

尝试抛出responsestatusexception。

throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "HELLO!");
b91juud3

b91juud32#

你的代码是正确的。调试并确保 RuntimeException 正在触发。如果它触发,它肯定会抛出 RuntimeException 参数。
我猜您的代码在runtimeexception行之前会出现错误,因此不会抛出错误消息。
使用这种方式抛出错误消息:
在服务类的某处添加以下代码

throw new RuntimeException("Hello");

在控制器类中捕获异常并抛出异常

catch (RuntimeException e) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Hello!");
        }

完整api示例:

@PostMapping(value = "/test-api")
public ResponseEntity<?> sampleMethod(@RequestBody UserDto userDto) {
    try {
        // Sample code
    } catch (RuntimeException e) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
    }
}:

相关问题