Spring验证返回很长的错误消息,而不仅仅是自定义的消息

2023-12-10

Spring验证返回很长的错误消息而不是自定义的一次。

这是 dto 中的代码部分。

public class RequestDto implements Serializable {
    @NotNull(message="{id.required}")
    private Long id;

}

在控制器中添加了@Valid用于输入。

@RequestMapping(value = ApiPath.PATH, method = RequestMethod.POST, produces = { "application/xml",
            "application/json" })
    public @ResponseBody ResultDecorator saveRequest(
            @Valid @RequestBody RequestDto msaDisabScreenRequestDto) throws Exception {

}

API 返回以下错误。

<message>Validation failed for argument at index 0 in method: public om.gov.moh.msa.framework.resolver.ResultDecorator om.controller.MaController.saveRequest(om..dto.RequestDto) throws java.lang.Exception, with 1 error(s): [Field error in object 'requestDto' on field 'id': rejected value [null]; codes [NotNull.requestDto.id,NotNull.id,NotNull.java.lang.Long,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [requestDto.id,id]; arguments []; default message [civilId]]; **default message [ID is required.]]** </message>

这里,自定义消息出现在末尾。 (默认消息 [ID 为必填项。)

使用全局异常的控制器建议,我正在重写handleMethodArgumentNotValid。我怎样才能在这里只返回自定义消息?

@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {



   /**
    * Spring validation related exception
    */
   @Override
   protected ResponseEntity<Object> handleMethodArgumentNotValid(
           MethodArgumentNotValidException ex,
           HttpHeaders headers,
           HttpStatus status,
           WebRequest request) {

       ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST);
       apiError.setMessage(ex.getMessage());
       return buildResponseEntity(apiError);
   }
}

您可以获得默认/自定义消息,例如result.getFieldError("yourFieldName").getDefaultMessage()

您可以通过控制器方法捕获错误消息,该方法应如下所示

    @RequestMapping(value = ApiPath.PATH, method = RequestMethod.POST, produces = { "application/xml", "application/json" })
    public @ResponseBody ResultDecorator saveRequest(@Valid @RequestBody RequestDto msaDisabScreenRequestDto, BindingResult result) throws Exception {
        if(result.hasErrors()){
            String errorMessage = result.getFieldError("yourFieldName").getDefaultMessage();
        }
    }

或者通过全局异常处理程序

Updated

    @Order(Ordered.HIGHEST_PRECEDENCE)
    @ControllerAdvice
    public class RestExceptionHandler extends ResponseEntityExceptionHandler {



       /**
        * Spring validation related exception
        */
       @Override
       protected ResponseEntity<Object> handleMethodArgumentNotValid(
               MethodArgumentNotValidException ex,
               HttpHeaders headers,
               HttpStatus status,
               WebRequest request) {

           //New Code
           BindingResult bindingResult = ex.getBindingResult();
           String errorMessage = result.getFieldError("yourFieldName").getDefaultMessage();
//---------------
           ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST);
           apiError.setMessage(errorMessage);
           return buildResponseEntity(apiError);
       }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring验证返回很长的错误消息,而不仅仅是自定义的消息 的相关文章

随机推荐

  • 如何从 otf 或 ttf 文件获取字体名称?

    我在之前的应用程序中使用了自定义字体 文件名是 ProximaNova Regular otf 并加载我刚刚使用的字体 UIFont fontWithName ProximaNova Regular size 20 这非常有效 现在在这个新
  • java jaxb 是如何工作的?

    只是好奇 jaxb 是如何工作的 我有一个注释如下的类 XmlRootElement name MyJaxb Class MyJaxb XmlElement protected String str public void setStr S
  • 如何获取.NET Core 2.0中登录用户的用户ID?

    我使用 NET Core 和 MVC 创建了一个 Angular 2 应用程序 我想知道用户的登录ID 如何在 net core中获取用户的登录ID 这是我的第一个角度应用程序 我使用以下链接开始https blogs msdn micro
  • 通过增强现实寻找餐馆和旅游景点

    在我的应用程序中 我想使用增强现实来查找家庭餐馆等地方 我想要做的是 当我启动应用程序时 相机打开 然后我想找到相机方向的位置 例如 我启动应用程序 我面向东方 手机键盘面向我 即西方 然后是东方向的地方 我已经编写了一些启动相机的代码 请
  • 如何正确地将事件附加到jqGrid“列选择器”的“关闭对话框”?

    我在正确使用 jqGrid 的列选择器插件 小部件的关闭对话框事件时遇到一些问题 这就是我所拥有的 我从 jqGrid 初始化开始 最后附加了列选择器 如下所示 ticketsTable tableWrap jqGrid url datat
  • ASP.NET MVC - 服务器软件要求?

    我今天刚刚了解了 asp net mvc 我想知道服务器端需要什么来托管它 我想是 IIS 6 及更新版本 和 NET 3 5 您还需要什么吗 来自 MSDN 如何 部署 ASP NET MVC 应用程序 基本上你需要 NET 3 5 Sy
  • RoR 4 中带有验证的正则表达式

    有如下代码 class Product lt ActiveRecord Base validates title description image url presence true validates price numericalit
  • 将 Identity 2.0 函数移至存储库类

    我在我的应用程序中使用 Identity 2 0 并希望将数据功能移动到存储库层 例如以下代码 public class ApplicationDbInitializer DropCreateDatabaseIfModelChanges
  • 如何避免列表之间出现双边框?

    我正在使用列表视图 其中有一个引用可绘制 列表的 xml 如下所示
  • 如何启动 Android GCM 令牌刷新?

    根据docs 保护客户端应用程序和应用程序服务器免受潜在恶意攻击 重复使用注册token 应定期发起token 从服务器刷新 当 GCM 注册令牌刷新时 从服务器端启动 客户端应用程序必须处理 tokenRefreshed 消息与 GCM
  • 如何正确启动 Angular Universal 到实时服务器

    我通过修改此处找到的通用启动器种子来设置和工作网站 https github com angular universal starter我已经让我的网站在 localhost 节点服务器上工作 呈现 HTML 现在我已经安装了 SSH 连接
  • jQuery fullCalendar 和 qTip

    我正在考虑使用 fullCalendar 并使用 qTip 使用 eventMouseover 显示描述 有没有人设法做到这一点或知道解决方案 我已经谷歌搜索并尝试实施这个帖子但我没有任何快乐 我唯一一次让它工作时它陷入了循环并导致我的浏览
  • 可选择注入内容脚本

    内容脚本可以通过在扩展清单文件中声明以编程方式或永久注入 程序注入需要主机权限 通常由浏览器或页面操作授予 在我的用例中 我想注入 gmail outlook com 和 yahoo 邮件网站 而无需用户操作 我可以通过声明所有这些清单来做
  • 在 C++ 中以编程方式设置 Firemonkey 控件字体

    我有一个自定义 Firemonkey 控件 它扩展了TEdit这是在表单上动态创建的 我试图在创建它时设置它的字体大小 Search gt Font gt Size 15 但是 控件上的字体保持不变 我有另一个相同类型的控件 该控件已经在表
  • 在 CF.NET 中创建大位图时出现 OutOfMemoryException

    我的紧凑框架应用程序通过将所有项目渲染到大位图表面 然后将该位图复制到屏幕上的偏移位置 以便仅显示适当的项目来创建平滑滚动列表 旧版本仅渲染当时应该出现在屏幕上的项目 但这种方法对于平滑滚动界面来说太慢了 最初创建大位图时 它偶尔会生成 O
  • PHP - MySQL 从存储过程中获取输出参数的值

    我使用 PHP 从 PHP 调用了 MySQL 存储过程mysqli 它有一个输出参数 rs mysqli gt query CALL addNewUser name age id 这里 id 是输出参数 接下来 我触发以下查询来获取 ou
  • 如何从 UICollectionViewCell 呈现 AlertView

    我正在使用 UICollectionView 和标题中的地图 我想处理核心位置错误 我有 3 种错误类型 对于其中两种 我想提供一个UIAlertView 但我收到错误 因为UICollectionViewCell没有名为的成员presen
  • 使用 java 中的代理代码连接到站点

    我想通过java中的代理连接到as站点 这是我写的代码 public class ConnectThroughProxy Proxy proxy new Proxy Proxy Type HTTP new InetSocketAddress
  • wss 龙卷风连接问题

    龙卷风服务器 ssl options certfile server crt keyfile server key application Application server tornado httpserver HTTPServer a
  • Spring验证返回很长的错误消息,而不仅仅是自定义的消息

    Spring验证返回很长的错误消息而不是自定义的一次 这是 dto 中的代码部分 public class RequestDto implements Serializable NotNull message id required pri