如何从 400 覆盖 @NotNull HTTP 状态代码

Posted

技术标签:

【中文标题】如何从 400 覆盖 @NotNull HTTP 状态代码【英文标题】:How to override the @NotNull HTTP Status Code from 400 【发布时间】:2022-01-20 03:48:31 【问题描述】:

我正在创建一个新的 SpringBoot API,并且我的模型中有一些强制参数。例如

@NotNull(message="Name is Mandatory")
public String Name

如果没有提供名称,它当前会返回状态代码 400 Bad Request 以及定义的消息。有没有办法将状态码从 400 覆盖到 404 Not found?

【问题讨论】:

尝试使用ControllerAdvice处理抛出的异常并返回404响应 我认为你可以让它抛出这样的异常并在你的 @ExceptionHandler 方法在你的 RestControllerAdvice 文件中处理它,当它的消息是你所期望的时候 【参考方案1】:

下面是显示自定义消息的几件事:

@NotNull(message = "error.title.notnull")
public String Name

之后我们可以在src/main/resources/messages中创建message.properties来显示错误信息:

error.title.notnull= Name is Mandatory

之后你需要在main类中制作MessageSource bean:

@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource messageSource() 
  ReloadableResourceBundleMessageSource messageBundle = new ReloadableResourceBundleMessageSource();
  messageBundle.setBasename("classpath:messages/message");   // Path of message.properties
  messageBundle.setDefaultEncoding("UTF-8");
  return messageBundle;

这是来自message.properties的获取消息。

【讨论】:

以上是关于如何从 400 覆盖 @NotNull HTTP 状态代码的主要内容,如果未能解决你的问题,请参考以下文章

未注解的方法会覆盖使用@NotNull 注解的方法

理解MySQL数据库覆盖索引 (转)

用iframe嵌套的页面会自动跳转覆盖父页面,请问如何解决?

未注释的方法覆盖使用@NotNull注释的方法

如何确保 Linq to Sql 不会覆盖或违反不可为空的 DB 默认值?

本地安装的 TTF 会覆盖 Google 字体