当前位置: 首页 > 知识库问答 >
问题:

如何将输入验证错误映射到Spring中的特定错误代码

罗翔
2023-03-14

我有一个案例,我想对endpoint的@Request estParams进行一些输入验证。

我知道Validator和Custom Validator,我目前的策略意味着围绕Request estParams创建一个包装器对象,一个自定义验证器并应用类级别的注释来触发自定义验证。

我的问题是,自定义验证正在实现ConstraintValidator,这意味着验证器将返回true或false,Spring将使用一些文本创建一个错误(我也知道我可以更改此文本)。然而,我的愿望是创建一个自定义负载返回给客户端。例如:

class MyError {
   int code;
   String message;
}

返回此对象的方法是通过@ControllerAdvice错误处理程序,该处理程序理解ConstraintValidationException应该返回我的自定义负载格式。但是,我需要返回不同的代码和消息,因为输入验证失败的原因不同。例如:

  • 字段为空-

据我所知,可以从我的@Controlller建议中访问的异常几乎不可能进行自定义,我可以获得发生的错误列表,但我无法轻松确定发生了什么。(从技术上讲,我可以,但它必须基于消息字符串,这是相当弱的)。

有没有办法向异常提供额外的数据,以便我能够从@ControllerAdvice中区分发生了什么,并相应地创建我的自定义错误响应?

我是不是走错路了?

共有1个答案

夹谷和裕
2023-03-14

您可以拦截BindException(https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/BindException.html)使用ExceptionHandler。其中包含有关所有验证错误的详细信息。例如,使用e.getFieldErrors()可以访问与字段相关的所有错误。

例如,对于字段

@MyConstraint
@Length(min = 3)
private String field;

如果验证失败,您将在异常中获得以下信息:

  • 字段上对象数据中的字段错误:拒绝值[XY];代码[Length.data.field,Length.field,Length.java.lang.String,Length]

从中可以看出,它未通过长度约束和自定义MyConstraint约束。

 类似资料:
  • 10倍验证精度得分:{0.7982993,0.6793838等(共10倍)}K倍平均精度得分:0.78679979 实际错误:

  • 问题内容: 我正在使用Spring进行表单输入和验证。表单控制器的命令包含正在编辑的模型。模型的某些属性是自定义类型。例如,“人”的社会保险号是自定义的SSN类型。 并在Spring表单编辑命令中包装Person: 由于Spring不知道如何将文本转换为SSN,因此我向表单控制器的活页夹注册了客户编辑器: SsnEditor只是一个可以将文本转换为SSN对象的自定义: 如果遇到无效且无法转换为SS

  • 问题内容: 我想自定义弹簧验证错误 但是我做不到。要采取的步骤是什么? 问题答案: 该JSR 303的默认邮件插补算法,您可以通过提供捆绑命名的资源来定制信息。在类路径中创建一个文件,其中包含: 这将更改@Size约束的默认消息,因此您应该使用@Size约束而不是特定于Hibernate的@Length约束。 您可以更改特定约束实例的消息,而不是更改所有约束的默认消息。message在约束上设置属

  • 问题内容: 非常奇怪的错误。我使用的是http://developers.facebook.com/docs/authentication/。所以我创建了对fb的请求并传递redirect_uri。我在本地主机上使用测试站点。所以如果我通过 redirect_uri = http://localhost/test_blog/index.php 它工作正常,但如果我通过 redirect_uri =

  • 问题是:我正在返回客户作为我的观点。根据我的观点,viewresolver应该映射到WEB-INF/Pages/Customer.html。相反,它正在通过dispatcher servlet,而无法找到客户HTML。它给出的错误是:“警告:在名为'mvc-dispatcher'的DispatcherServlet中找不到URI为[/springmvc/web-inf/pages/customer

  • 如何转换rxJava中可观察对象返回的错误?现在我有了这个方法: 这种行为是,通过或传递的任何异常都会传播到此函数返回值的订阅者。是否有可能将例外映射到其他东西?就像