You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用javax.validation让异常输出@NotNull注解的自定义提示信息?

解决javax.validation输出自定义非空提示的问题

你现在的问题核心是id使用了int基本数据类型,它无法存储null值,JSON转对象时遇到null直接抛出NullPointerException,导致@NotNull注解根本没机会执行校验。要实现你需要的自定义错误提示,按以下步骤修改:

1. 修改Emp类的id类型为Integer

int是基本类型,默认值为0,无法接收null,JSON解析工具遇到null赋值给int时直接抛NPE,@NotNull注解完全起不了作用。改成包装类型Integer后,才能让null值被正常赋值,进而触发校验逻辑。

修改后的Emp类代码:

class Emp{
    @NotNull(message="id should not be null")
    private Integer id; // 将int改为Integer
    @NotNull(message="name should not be null")
    private String name;
    // getter、setter 保持不变
}

2. 手动触发javax.validation的校验

JSON转换工具仅负责对象转换,不会自动执行javax.validation校验。转换完成后,需要手动获取Validator实例,对对象进行校验并处理结果。

修改后的MyActionClass代码:

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
import java.util.Set;

class MyActionClass{
    public void getRequestForm(String inputJsonString){
        // 建议将ValidatorFactory和Validator设为全局单例,避免重复创建浪费资源
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        try{
            Emp empInput = MyConvertClass.jsonToObject(inputJsonString);
            // 执行校验
            Set<ConstraintViolation<Emp>> violations = validator.validate(empInput);
            if(!violations.isEmpty()){
                // 遍历输出所有校验错误信息
                for(ConstraintViolation<Emp> violation : violations){
                    System.out.println(violation.getMessage());
                }
            }
        } catch(Exception e){
            // 捕获JSON格式错误等转换异常
            System.out.println(e.getMessage());
        }
    }
}

补充说明

  • 若项目基于Spring框架,可直接注入Validator实例,无需手动创建,校验逻辑一致。
  • ValidatorFactory属于重量级对象,建议全局只初始化一次,不要在每次方法调用时创建。
  • 完成上述修改后,当JSON中id为null时会输出"id should not be null",name为null时输出"name should not be null",不会再抛出NullPointerException。

内容的提问来源于stack exchange,提问作者MMMMS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:53:12