SpringBoot-表单验证-统一异常处理-自定义验证信息源( 六 )

7.3 修改控制器删除方法中的BindingResult result参数,将错误直接抛给统一异常处理类去解决即可 。
import com.ldx.valid.exception.BusinessException;import com.ldx.valid.model.SysUser;import com.ldx.valid.model.ValidationInterface;import com.ldx.valid.service.UserService;import com.ldx.valid.util.CommonResult;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.validation.FieldError;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;import javax.validation.*;import javax.validation.constraints.NotEmpty;import java.text.MessageFormat;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/** * 用户管理控制器 * @author ludangxin * @date 2021/8/5 */@Slf4j@Validated@RestController@RequestMapping("sys/user")public class SysUserController {private static final List<SysUser> USERS = new ArrayList<>();// 数据初始化static {SysUser user = new SysUser();user.setId(1L);user.setUsername("zhangsan");user.setPhone("13566666666");user.setEmail("example@qq.com");USERS.add(user);SysUser user1 = new SysUser();user1.setId(2L);user1.setUsername("lisi");user1.setPhone("13588888888");user1.setEmail("example1@qq.com");USERS.add(user1);}/*** 根据手机号或邮箱查询用户信息* @param sysUser 查询条件* @return 用户list*/@GetMappingpublic CommonResult queryList(@Validated(value = https://www.isolves.com/it/cxkf/kj/2021-08-11/ValidationInterface.select.class) SysUser sysUser) {String phone = sysUser.getPhone();String email = sysUser.getEmail();if(phone == null && email == null) {return CommonResult.success(USERS);}List queryResult = USERS.stream().filter(obj -> obj.getPhone().equals(phone) || obj.getEmail().equals(email)).collect(Collectors.toList());return CommonResult.success(queryResult);}/*** 根据手机号和邮箱查询用户信息* @param phone 手机号* @return 用户list*/@GetMapping("selectByPhone")public CommonResult queryByPhone(@NotEmpty(message = "手机号不能为空") String phone) {List queryResult = USERS.stream().filter(obj -> obj.getPhone().equals(phone)).collect(Collectors.toList());return CommonResult.success(queryResult);}/*** 新增用户信息* @param sysUser 用户信息* @return 成功标识*/@PostMappingpublic CommonResult add(@Validated(value = ValidationInterface.add.class) @RequestBody SysUser sysUser) {Long id = (long) (USERS.size() + 1);sysUser.setId(id);USERS.add(sysUser);return CommonResult.success("新增成功");}/*** 根据Id更新用户信息* @param sysUser 用户信息* @return 成功标识*/@PutMapping("{id}")public CommonResult updateById(@PathVariable("id") Long id,@Validated(value = ValidationInterface.update.class)@RequestBody SysUser sysUser){for(int i = 0; i < USERS.size(); i++) {if(USERS.get(i).getId().equals(id)) {USERS.set(i,sysUser);}}return CommonResult.success("更新成功");}/*** 根据Id删除用户信息* @param id 主键* @return 成功标识*/@DeleteMapping("{id}")public CommonResult deleteById(@PathVariable Long id) {USERS.removeIf(obj -> obj.getId().equals(id));return CommonResult.success("删除成功");}/*** 测试业务异常*/@GetMapping("testException")public CommonResult testException(String name) {if(!"张三".equals(name)){throw new BusinessException("只有张三才可以访问");}return CommonResult.success();}}7.4 启动测试查询:
? 输出错误的邮箱

SpringBoot-表单验证-统一异常处理-自定义验证信息源

文章插图
 
根据手机号查询:
? 输入空值手机号
SpringBoot-表单验证-统一异常处理-自定义验证信息源

文章插图
 
新增:
? 输入错误的手机号
SpringBoot-表单验证-统一异常处理-自定义验证信息源

文章插图
 
测试主动抛出业务异常:
SpringBoot-表单验证-统一异常处理-自定义验证信息源

文章插图
 
8. 自定义验证信息源8.1 修改配置文件import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.ReloadableResourceBundleMessageSource;import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;import javax.validation.Validator;import java.util.Properties;/** * 配置 Hibernate 参数校验 * @author ludangxin * @date 2021/8/5 */@Configurationpublic class ValidatorConfig {@Beanpublic MethodValidationPostProcessor methodValidationPostProcessor(Validator validator) {MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor();postProcessor.setValidator(validator);return postProcessor;}/*** 实体类字段校验国际化引入*/@Beanpublic Validator validator() {LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();// 设置messages资源信息ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();// 多个用逗号分割messageSource.setBasenames("classpath:/messages/validation/messages");// 设置字符集编码messageSource.setDefaultEncoding("UTF-8");validator.setValidationMessageSource(messageSource);// 设置验证相关参数Properties properties = new Properties();// 快速失败,只要有错马上返回properties.setProperty("hibernate.validator.fail_fast", "true");validator.setValidationProperties(properties);return validator;}}


推荐阅读