如何优雅的数据校验
序:最近做接口开发,需要做一些校验,但如果手写代码校验,代码臃肿不说,还不是很好维护,于是在网上搜索了一下,发现javax.validation.Valid 很好的解决了这个问题。且单个对象和list集合对象有不同的用法,下面就分别说一下。
1、单个对象
@RequestBody @Valid 通过@Valid 修饰 controller如下
public IfcResponseData cx(@RequestBody @Valid ZcVlRCxMidT ZcVlRCxMidT, BindingResult result, HttpServletRequest request)
对象属性需要用不同注解修饰
@NotNull(message = "车型编码不能为空")
private String carType;
@NotNull(message = "车型简称不能为空")
private String abbreviation;
具体crontroller和对象
@RequestMapping(value = "/cx",
method = {RequestMethod.GET, RequestMethod.POST}, produces = "application/json;charset=UTF-8")
@ResponseBody
public IfcResponseData cx(@RequestBody @Valid ValidableList<ZcVlRCxMidT> records, BindingResult result, HttpServletRequest request) {
IExtensionRequest createExtensionRequestContext = createRequestContext(request);
if(result.hasErrors()){
String defaultMessage = result.getFieldError().getDefaultMessage();
IfcResponseData ifcResponseData = new IfcResponseData(defaultMessage);
return ifcResponseData;
}
return vlPubAcceptService.cx(createExtensionRequestContext.getIRequest(), records);
}
package com.dfwl.tms.zc.vo.vl;
import javax.validation.constraints.NotNull;
public class ZcVlRCxMidT extends ZcVlRBaseMidT{
private String id;
private String interfaceId;
@NotNull(message = "车型编码不能为空")
private String carType;
@NotNull(message = "车型简称不能为空")
private String abbreviation;
private String typeName;
private String typeKind;
private String flag;
private String brand;
private String note;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getInterfaceId() {
return interfaceId;
}
public void setInterfaceId(String interfaceId) {
this.interfaceId = interfaceId == null ? null : interfaceId.trim();
}
public String getCarType() {
return carType;
}
public void setCarType(String carType) {
this.carType = carType == null ? null : carType.trim();
}
public String getAbbreviation() {
return abbreviation;
}
public void setAbbreviation(String abbreviation) {
this.abbreviation = abbreviation == null ? null : abbreviation.trim();
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName == null ? null : typeName.trim();
}
public String getTypeKind() {
return typeKind;
}
public void setTypeKind(String typeKind) {
this.typeKind = typeKind == null ? null : typeKind.trim();
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag == null ? null : flag.trim();
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand == null ? null : brand.trim();
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note == null ? null : note.trim();
}
}
2、list集合
list集合不能直接使用应该使用自定义ValidableList
package com.dfwl.tms.zc.vo;
import javax.validation.Valid;
import java.util.*;
/**
* @program: tms-web
* @description:
* @author: jiny
* @create: 2023-03-16 13:35
*/
public class ValidableList <E> implements List<E> {
@Valid
private List<E> list = new LinkedList<>();
@Override
public int size() {
return list.size();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public boolean contains(Object o) {
return list.contains(o);
}
@Override
public Iterator<E> iterator() {
return list.iterator();
}
@Override
public Object[] toArray() {
return list.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return list.toArray(a);
}
@Override
public boolean add(E e) {
return list.add(e);
}
@Override
public boolean remove(Object o) {
return list.remove(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return list.containsAll(c);
}
@Override
public boolean addAll(Collection<? extends E> c) {
return list.addAll(c);
}
@Override
public boolean addAll(int index, Collection<? extends E> c) {
return list.addAll(index, c);
}
@Override
public boolean removeAll(Collection<?> c) {
return list.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return list.retainAll(c);
}
@Override
public void clear() {
list.clear();
}
@Override
public E get(int index) {
return list.get(index);
}
@Override
public E set(int index, E element) {
return list.set(index, element);
}
@Override
public void add(int index, E element) {
list.add(index, element);
}
@Override
public E remove(int index) {
return list.remove(index);
}
@Override
public int indexOf(Object o) {
return list.indexOf(o);
}
@Override
public int lastIndexOf(Object o) {
return list.lastIndexOf(o);
}
@Override
public ListIterator<E> listIterator() {
return list.listIterator();
}
@Override
public ListIterator<E> listIterator(int index) {
return list.listIterator(index);
}
@Override
public List<E> subList(int fromIndex, int toIndex) {
return list.subList(fromIndex, toIndex);
}
public List<E> getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
}
通过代码中的
if(result.hasErrors()){
String defaultMessage = result.getFieldError().getDefaultMessage();
IfcResponseData ifcResponseData = new IfcResponseData(defaultMessage);
return ifcResponseData;
}