javax.validation.Valid 优雅校验数据

如何优雅的数据校验

序:最近做接口开发,需要做一些校验,但如果手写代码校验,代码臃肿不说,还不是很好维护,于是在网上搜索了一下,发现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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心系代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值