SpringBoot中使用Validation所踩过的坑

话不多说先放代码,实体类代码如下

package com.ccnu.po;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "t_type")
public class Type {

    @Id
    @GeneratedValue
    private Long id;
    @NotBlank(message = "分类名称不能为空")
    private String name;

    @OneToMany(mappedBy = "type")
    private List<Blog> blogs = new ArrayList<>();

    public Type() {
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Blog> getBlogs() {
        return blogs;
    }

    public void setBlogs(List<Blog> blogs) {
        this.blogs = blogs;
    }

    @Override
    public String toString() {
        return "Type{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

此处使用@NotBlank注解对name进行非空验证

接下来先放一段错误的controller层代码

@PostMapping("/type")
public String post(@Valid Type type,
                   RedirectAttributes attributes,
                   BindingResult result){
    if (result.hasErrors()){
        return "admin/type-input";
    }
    Type t = typeService.saveType(type);
    if(t == null){
        attributes.addFlashAttribute("message","操作失败");
    }else{
        attributes.addFlashAttribute("message","操作成功");
    }
    return "redirect:/admin/type";
}

@Valid注解和BindingResult参数也都写了,但后台仍然包如下错误

Field error in object 'type' on field 'name': rejected value []; codes [NotBlank.type.name,NotBlank.name,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [type.name,name]; arguments []; default message [name]]; default message [分类名称不能为空]]
最后经查询官方文档知BindingResult参数必须紧跟着@Valid修饰的参数后面(如果写在前面或者中间隔了一个参数都将不起作用),正确地Controller层代码如下

@PostMapping("/type")
public String post(@Valid Type type,
                   BindingResult result,
                   RedirectAttributes attributes
                   ){
    if (result.hasErrors()){
        return "admin/type-input";
    }
    Type t = typeService.saveType(type);
    if(t == null){
        attributes.addFlashAttribute("message","操作失败");
    }else{
        attributes.addFlashAttribute("message","操作成功");
    }
    return "redirect:/admin/type";
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值