在利用springboot編寫服務(wù)器代碼的時(shí)候稳其,我們對(duì)于一個(gè)pojo類(可能是前端傳過來的)一定要進(jìn)行參數(shù)驗(yàn)證皂股。如果寫大量的參數(shù)檢驗(yàn)方法界弧,也是一件很麻煩事伟阔。那么,請(qǐng)往下看......
1.創(chuàng)建工具類
package com.hierway.vslm.common.util;
import com.hierway.utility.api.result.ApiException;
import com.hierway.utility.api.result.ResultCode;
import org.hibernate.validator.HibernateValidator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;
/**
* @ClassName ValidateUtil
* @Description 驗(yàn)證工具類
* @Date 2019/8/12 17:36
* @Created by sunyiwei
*/
public class ValidateUtil {
/**
*
* @param validateData
* @param resultCode
* @param validateGroup
* @param <T>
*/
public static <T> void validateParams(T validateData, ResultCode resultCode, Class... validateGroup){
if(validateData == null){
throw new ApiException(ResultCode.PARAMS_ERROR);
}
Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
Set<ConstraintViolation<T>> validate = validator.validate(validateData,validateGroup);
for(ConstraintViolation<T> error : validate){
throw new ApiException(resultCode,error.getMessage());
}
}
}
其中ApiException為自定義的異常愈魏,我們也可以換成return觅玻。
2.pojo類中編寫驗(yàn)證注解以及錯(cuò)誤提示(注解請(qǐng)百度)
package com.hierway.vslm.dataaccess.mybatis.dao;
import com.hierway.model.vslm.common.ApsTime;
import com.hierway.model.vslm.stream.StreamLine;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.time.LocalDateTime;
import java.util.Objects;
import static com.hierway.vslm.common.util.TimeUtil.splitTime;
/**
* @ClassName StreamLine
* @Description 流水線與數(shù)據(jù)庫映射實(shí)體類, 以下屬性如果與數(shù)據(jù)庫字段一樣,或者屬性駝峰轉(zhuǎn)下劃線后與數(shù)據(jù)庫一致培漏,則不需要定義@Colomn
* 如果實(shí)體類名與數(shù)據(jù)庫一致溪厘,或大駝峰轉(zhuǎn)下劃線與數(shù)據(jù)庫表名一致,則不需要定義@Table注解
* @Date 2019/7/16 16:16
* @Created by sunyiwei
*/
public class SLine {
@Id
private String lineId;
@Pattern(regexp = "[\\u4e00-\\u9fa5]*[a-z]*[A-Z]*\\d*-*_*", message = "Illegal name")
@NotBlank(message = "name is empty")
private String name;
private String area;
@NotNull(message = "spec is empty")
private String specId;
@NotNull(message = "vplId is empty")
@NotBlank(message = "vpl No. is blank")
private String vplId;
private Integer status;
@NotNull(message = "startTime is empty")
private LocalDateTime startTime;
@NotNull(message = "endTime is empty")
private LocalDateTime endTime;
private LocalDateTime createTime;
private LocalDateTime modifyTime;
private String modifyPerson;
public SLine() {
}
}
3.使用
package com.hierway.vslm.controller;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import static com.hierway.vslm.common.util.ValidateUtil.*;//靜態(tài)導(dǎo)包
import java.util.List;
@RestController
public class StreamLineRestApi {
@Autowired
private StreamLineService streamLineService;
@ApiOperation(value = "")
@RequestMapping(value = "/sline",method = RequestMethod.POST)
public ApiResult<Void> createStreamLine(@RequestBody SLine streamLine){
validateParams(streamLine,ResultCode.PARAMS_ERROR);//此處調(diào)用驗(yàn)證方法牌柄,如果異常畸悬,則進(jìn)入全局異常捕獲
boolean createResult = streamLineService.createStreamLine(streamLine);
if(createResult == true){
return ResultUtil.success();
}
return ResultUtil.error(ResultCode.ADD_FAILED);
}
}
4.測試
測試參數(shù)截圖
測試結(jié)果截圖