表单认证

我们先对之前插入一条记录的方法进行一些修改,这是之前的代码

@PostMapping(value = "/girl")
public Girl addGirl(@RequestParam("cupSize") String cupSize,
                    @RequestParam("age") Integer age) {
    Girl girl = new Girl();
    girl.setAge(age);
    girl.setCupSize(cupSize);

    return girlRepository.save(girl);
}

如果一个Girl的属性很多,我们是不是需要罗列她所有的request param呢。不用,我们可以通过传入一个Girl对象来完成这件事

    @PostMapping(value = "/girl")
    public Girl addGirl(Girl girl) {
        return girlRepository.save(girl);
    }

接下来我们想保证传入的girl的年龄必须大于等于18岁,怎么来做。

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.Min;

@Entity // 表示这个类就是对应数据库里的一个表
public class Girl {

    @Id //Specifies the primary key of an entity
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String cupSize;

    @Min(value = 18, message = "too young")
    private Integer age;

    public Girl() {}

    public Integer getId() {
        return id;
    }

    public String getCupSize() {
        return cupSize;
    }
    
    public Integer getAge() {
        return age;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

首先我们先修改Girl类,在age这个field上加一行@Min(value = 18, message = "too young"),这就限制了新加入的girl的年龄至少为18。
然后稍稍修改一下我们的post方法。

@PostMapping(value = "/girl")
public Girl addGirl(@Validated Girl girl, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        System.out.println(bindingResult.getFieldError().getDefaultMessage());
        return null;
    }

    return girlRepository.save(girl);
}

在girl这个parameter前加一个@ValidAnnotation,表示这个girl对象会被验证。同时用BindingResult来帮助我们获取验证结果。

你可能感兴趣的:(表单认证)