默认情况下,spring boot不会为任何异常返回消息,包括ResponseStatusException
,这意味着下面关于Bar
的消息不会返回给客户端:
@GetMapping("/foo")
@ResponseBody
public Foo getFoo(@RequestParam(name = "bar", defaultValue = "0") int bar) {
if (bar <= 0) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "bar must always be positive");
}
return example.getFoo(bar);
}
这可以通过在application.properties
中设置server.error.include-message=allays
来更改,但是这会导致所有异常消息返回到客户端,包括以下消息:
@GetMapping("/baz")
@ResponseBody
public Baz getBaz() {
if (!security.checkSecurity()) {
throw new RuntimeException("Security breach! Hope no one finds out!");
}
return example.getBaz();
}
我知道这是一个微不足道的示例,解决方案只是“不要从控制器抛出服务器异常”,但异常实际上可能来自应用程序中深埋的其他代码,甚至可能是NullPointerException
或其他任何代码。
如何使应用程序只显示来自ResponseStatusException
的消息,而不显示其他类型的异常?(我想除了在每个控制器方法中添加try-catch子句之外。)
您可以向任何控制器添加额外的(@ExceptionHandler)方法,专门处理同一控制器中的请求处理(@RequestMapping)方法引发的异常。这些方法可以:
控制器建议允许您使用完全相同的异常处理技术,但将它们应用于整个应用程序,而不仅仅是单个控制器。您可以将它们看作是一个注释驱动的拦截器。
任何带有@ControllerAdvice注释的类都将成为controller-advice,并且支持三种类型的方法:
解决方案:
@ControllerAdvice
public class RestControllerAdvice {
@ExceptionHandler(ResponseStatusException.class)
public ResponseEntity<String> handleStatusException(ResponseStatusException exception) {
return new ResponseEntity<>(exception.getMessage(), HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception exception) {
return new ResponseEntity<>("Exception", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
当我从Netbeans运行项目时,它工作正常:图标出现在窗口的左上角和任务栏中。图像位于项目的根目录中。 当我清理和构建项目时,它生成两个安装程序:一个exe和一个MSI;当我安装应用程序并打开它时,窗口没有图标sicadcam.png,它有默认的java徽标图标。
问题内容: 如何为Android应用程序设置IntelliJ IDEA? 问题答案: 我花了整整一天的时间尝试将所有内容组合在一起,涉及数百个站点和教程,但是它们都跳过了琐碎的步骤。 因此,这里是完整的指南: 下载并安装 Java JDK (选择Java平台) 下载并安装 Android SDK (建议安装程序) android SD完成安装后,在 Android SDK Tools* 下打开 S
如何设置电子应用程序的应用程序图标? 我正在尝试
问题内容: 我有一个非常简单的,我正在尝试设置自定义错误消息。但是由于某种原因,该错误没有显示出来。 这是我的控制器: 这是我得到的答复: 我正在传递JSON,但我没有验证任何内容,我只是在尝试设置自定义消息。如果更改状态代码,则会在响应中看到它,但是始终为空。 为什么这不按预期工作?这是一个非常简单的示例,我看不到可能缺少的内容。当我调试代码时,我可以看到错误消息设置了所有字段。但是由于某种原因
我有一个非常简单的< code>@RestController,我试图设置一个自定义的错误消息。但是由于某种原因,错误的< code >消息没有显示出来。 这是我的控制器: 这是我得到的回应: 我正在传递一个JSON,但我没有验证任何东西,我只是试图设置自定义消息。如果我更改状态代码,我会在响应中看到,但< code>message始终为空。 为什么这没有像预期的那样工作?这是一个如此简单的示例,
问题内容: 我的表中有一行我不想更改(曾经)。 是否可以将MySQL行设置为READ-ONLY,以便不能以任何方式更新它?如果是这样,怎么办? 如果不是,是否可以在该行的某一列中设置一个永久值,以使其无法更改?如果是这样,怎么办? 谢谢。 问题答案: 这可能是业务逻辑,可能不属于您的数据存储层。但是,仍然可以使用触发器来实现。 如果将要更新“锁定”记录,则可以创建引发错误的触发器;由于 在执行 该