求求你别再写if else了 ----- Java参数校验方法

1.前言

   相信各位小伙伴在实际的项目开发过程中迫于业务逻辑经常需要写很多if else来进行判断。
   这样经常会使开发工作变得繁琐,并且在希望保留记录的情况下需要写大量注释文档。
   即使这样,对后期的维护工作也不是非常友好。
   本人就曾经被一个1400行的if else折磨的不要不要的!
   策略模式可以解决很多这样的问题,但并不适用于全部情况。比如对实体类参数的校验。
   本文记录一些参数校验方法,默认各位对spring-boot比较了解。不了解可忽略spring部分。

2.普通方法中对实体类的校验

import lombok.Data;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.constraints.*;
import java.util.Set;
@Data
public class Group{

	public interface add{}
	public interface update{}

	private Integer id;
	@NotBlank(message = "名称不可为空白", groups = {add.class, update.class})
	private String name;
	@Size(min = 5, groups = add.class)
	private String info;
	@Min(value = 10, groups = update.class)
	private Integer count;

	public static void main(String[] args) {
    	Group g = new Group();
    	g.setInfo("111");
    	g.setCount(5);
    	Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    	Set<ConstraintViolation<Group1>> validate = validator.validate(g, add.class);
    	for (ConstraintViolation<Group1> c : validate) {
        	System.out.println(c.getMessage());
    	}

	}
}
代码可直接运行
其中接口add/update用于区分校验分组,无其它实际意义

2.spring service impl方法中对实体类的校验

@Service
public class GroupServiceImpl implements GroupService {
   	@Resource
   	private ValidatorFactory validatorFactory;
   	@Override
	public void addGroup(Group group) {
    	Set<ConstraintViolation<Group>> validate = validatorFactory.getValidator().validate(group, Group.add.class);
    	for (ConstraintViolation<Group> c : validate) {
        	System.out.println(c.getMessage());
    	}
    	System.out.println(group.toString());
	}
}
代码直接使用2中的实体类忽略校验以外的逻辑和业务

3.spring-boot controller对实体类的校验

pom中引入下面依赖
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

@RestController
@RequestMapping(value = "/group")
public class GroupController {
	@PostMapping(value = "/add")
	public String add(@RequestBody @Validated(Group.add.class) Group g, BindingResult result) {
		if (result.hasErrors()) {
        	for (ObjectError oe : result.getAllErrors()) {
            	System.out.println(oe.getDefaultMessage());
        	}
    	}
    	System.out.println(g);
	}
}

4.附上一些可供参考的链接

自定义校验、嵌套校验
https://blog.csdn.net/weixin_35977449/article/details/112142912
常用注解
https://blog.csdn.net/weixin_43874301/article/details/102604869
自定义校验
https://blog.csdn.net/justry_deng/article/details/86571671
中文文档
https://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值