【问题标题】:how to avoid displaying rejected value if spring validation is failed at request bean validation如果在请求 bean 验证时 spring 验证失败,如何避免显示被拒绝的值
【发布时间】:2022-11-21 16:21:13
【问题描述】:

从下面的日志我们可以看到拒绝值是显示用户数据(例如:带有一些特殊字符的用户 PII 数据)

[Field error in object 'Customer' on field 'FirstName': rejected value [robert% steve];

所以我们尝试使用@ControllerAdvice,MethodArgumentNotValidException并自定义默认错误消息以显示定义的错误消息。

但不知何故,这种方法不适用于我们的功能测试用例。那么有什么配置可以不显示rejected value吗?还是用掩蔽显示被拒绝的价值?

谢谢。

【问题讨论】:

  • 请有人帮我解决这个问题
  • 对于这个问题,您不需要“来自信誉良好的来源的答案”,这似乎有些过分了。
  • @MorBlau 抱歉,我没有收到您的评论。

标签: java spring spring-boot


【解决方案1】:

您可以设置自己的自定义验证注释,设置自己的验证规则和拒绝消息:

@Documented
@Constraint(validatedBy = MyValidator.class) 
@Target( { ElementType.METHOD, ElementType.FIELD }) // set the desired context
@Retention(RetentionPolicy.RUNTIME)
public @interface MyValidation {
    String message() default "Validation error! Not going to display rejected value.";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

你也可以在@Constraint中设置多个验证器,它们会连续运行。

验证器:

public class MyValidator implements 
  ConstraintValidator<MyValidation, String> { // here you set the validated field type, e.g. String

    @Override
    public void initialize(MyValidation value) {
    }

    @Override
    public boolean isValid(String value,
        ConstraintValidatorContext cxt) {
        ... // some validation logic
        return true/false;
    }

}

然后只需将您的注释添加到验证字段。您甚至可以在此时更改消息:

@MyValidation(message = "Error!")
String validField;

更多深度信息,可以查看https://www.baeldung.com/spring-mvc-custom-validator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多