文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中的@Valid,@Validated和@PathVariable怎么用

2023-06-30 10:28

关注

这篇文章主要介绍“Java中的@Valid,@Validated和@PathVariable怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中的@Valid,@Validated和@PathVariable怎么用”文章能帮助大家解决问题。

@Valid和@Validated

@Valid和@Validated比较

@Valid高级使用

@Valid级联校验

@Validated高级使用

@Validated分组校验
@RestController@RequestMapping("/person")public class PersonGroupController {// 不指定分组时校验@GetMapping("/person")public Result getPerson(@Validated @RequestBody PersonGroup person) {return Result.buildSuccess(person);}// 指定AddGroup分组校验@PostMapping("/person")public Result addPerson(@Validated(value = PersonGroup.AddGroup.class) @RequestBody PersonGroup person) {return Result.buildSuccess(person);}// 指定UpdateGroup分组校验@PutMapping("/person")public Result updatePerson(@Validated(value = PersonGroup.updateGroup.class) @RequestBody PersonGroup person) {return Result.buildSuccess(person);}}
@Validated分组校验顺序
@Datapublic class UserGroupSequence {public interface FirstGroup {}public interface SecondGroup {}// 使用GroupSequence定义分组校验顺序:按照FirstGroup,SecondGroup分组顺序进行校验@GroupSequence({FirstGroup.class, SecondGroup.class})public interface Group {}@NotEmpty(message = "用户ID必须提交!", group = FirstGroup.class)private String userId;@NotEmpty(message = "用户姓名必须提交!", group = FirstGroup.class)@Size(min = 2, max = 8, message = "用户姓名的长度在2~8之间", goup = Second.class)private String userName;}
@RestController@RequestMapping("/user")public class UserGroupSequenceController {// 这里方法中@Validated注解value的值是Group.class@PostMapping("/user")public Result addGroup(@Validated(value = Group.class) @RequestBody UserGroupSequence user) {return Result.buildSuccess(user);}}
@Validated非实体类校验
@Validatedpublic class AnnotationController {@GetMapping("/person")public Result getAge(@Range(min = 2, max = 8, message = "年龄在3~8岁!") @RequestParam int age) {return Result.buildSuccess(age);}}
@ExceptionHandler(ConstraintViolationException.class)@ResponseBodypublic Result resolveConstraintViolationException(ConstraintVilationException exception) {Set<ConstraintVilation<?>> constraintVilations = exception.getConstraintVilations();// 处理异常信息if (!CollectionUtils.isEmpty(constraintVilations)) {StringBuilder messageBuilder = new StringBuilder();for (ConstraintVilation constraintViolation : constraintVilations) {messageBuilder.append(constraintVilation.getMessage()).append(",");}String errorMessage = messageBuilder.toString();if (errorMessage.length() > 1) {errorMessage.substring(0, errorMessage.length() - 1);}return Result.builderFailure(ErrorStatus.ILLEGAL_DATA.getCode(), errorMessage);} return Result.builderFailure(ErrorStatus.ILLEGAL_DATA.getCode(), exception.getMessage())}

@PathVariable

正则表达式校验

// 请求路径中的id必须是数字,否则寻找不到这个路径404@GetMapping("/user/{id:\\d+}")public Result getId(@PathVariable(name="id") String userId) {return Result.buildSuccess(userId);}

继承BasicErrorController类

@RestControllerpublic class PathErrorController extends BasicErrorController {@Autowiredpublic PathErrorController(ErrorAttributes errorAttributes, ServerProperties serverProperties, List<ErrorViewResolver> errorViewResolvers) {super(errorAttributes, serverProperties.getError(), errorViewResolvers);}@Overridepublic ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {HttpStatus status = getStatus(request);Map<String, Object> model = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML));ModelAndView modelAndView = new ModelAndView("pathErrorPage", model, status);return modelAndView;}@Overridepublic ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {Map<String, Object> body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));Map<String, Object> responseBody = new HashMap<>(8);responseBody.put("success", false);responseBody.put("code", body.get("status"));responseBody.put("message", body.get("error")); return new ResponseEntity<>(responseBody, HttpStatus.OK);}}

自定义校验注解

@Documented@Constraint(validateBy = {Show.ShowConstraintValidator.class})@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})@Rentation(RUNTIME)public @interface Show {String message() default "{com.oxford.annotation.Show.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};int[] value();class ShowConstraintValidator implements ConstraintValidator<Show, Integer> {private Set<Integer> set = new HashSet<>();@Overridepublic void initilize(Show constraintAnnotation) {int[] value = constraintAnnotation.value();for (int v : value) {set.add(i);}}@Overridepublic boolean isValid(Integer value, ConstraintValidatorContext context) {return set.contains(value);}} }
@Datapublic class AnnotationQuery {@Show(value = {0, 1}, message = "数值只能是0或者1")private Integer isShow;}
@PostMapping("/annotation")public Result addAnnotation(@Validated @RequestBody AnnotationQuery annotation) {return Result.buildSuccess(annotation);}

关于“Java中的@Valid,@Validated和@PathVariable怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯