【问题标题】:Trying to presist to MAMP using java spring boot, hibernate and thmyeleaf but run into errors when validating尝试使用 java spring boot、hibernate 和 thymeleaf 坚持到 MAP,但在验证时遇到错误
【发布时间】:2019-01-19 12:31:39
【问题描述】:

我已经构建了我的控制器、客户端和地址类(模型)以及用于索引和添加的模板。当我尝试测试验证时,弹簧返回:

出现意外错误(类型=内部服务器错误, 状态=500)。类的验证失败 [com.pooltracker.models.Address] 在组的持续时间内 [javax.validation.groups.Default, ] 约束违规列表:[ ConstraintViolationImpl{interpolatedMessage='无效', propertyPath=zipCode, rootBeanClass=class com.pooltracker.models.Address,messageTemplate='无效'} ConstraintViolationImpl{interpolatedMessage='不能为空', propertyPath=状态,rootBeanClass=类 com.pooltracker.models.地址, messageTemplate='{javax.validation.constraints.NotNull.message}'} ConstraintViolationImpl{interpolatedMessage='不能为空', propertyPath=street, rootBeanClass=class com.pooltracker.models.Address, messageTemplate='不能为空'} ConstraintViolationImpl{interpolatedMessage='不能为空', propertyPath=city, rootBeanClass=class com.pooltracker.models.Address, messageTemplate='不能为空'} ]

我了解到 hibernate 无法处理地址类的验证。我偶然发现了 bean 验证的主题。我对此并不陌生,并试图找到解决我的问题的最佳方法,而目前不会在兔子洞中走得太远。下面是我的控制器和模型。

@Controller
@RequestMapping("clients")
public class ClientController {

    @Autowired
    private ClientDao clientDao;

    @Autowired
    private AddressDao addressDao;

    @RequestMapping(value = "")
    public String index(Model model) {        
        model.addAttribute("clients", clientDao.findAll());
        model.addAttribute("title", "My Clients");        
        return "clients/index";
    }

    @RequestMapping(value = "add", method = RequestMethod.GET)
    public String displayAddClientForm(Model model) {        
        model.addAttribute("title", "Add Client");
        model.addAttribute(new Client());
        return "clients/add";
    }

    @RequestMapping(value = "add", method = RequestMethod.POST)
    public String processAddClientForm(@ModelAttribute @Valid Client newClient,
                                       Errors errors, Model model) {

         if (errors.hasErrors()) {
            model.addAttribute("title", "Add Client");
            model.addAttribute("client", newClient);
            return "clients/add";
        }        

        clientDao.save(newClient);
        return "redirect:";
    }
}

Client实体:

@Entity
@Table(name = "client")
public class Client {

    @Id
    @GeneratedValue
    @Column(name = "client_id")
    private int id;

    @NotNull
    @Size(min=1, message = "Client must have a first name")
    @Column(name = "first_name")
    private String firstName;

    @NotNull
    @Size(min=1, message = "Client must have a last name")
    @Column(name = "last_name")
    private String lastName;

    @OneToOne(cascade = CascadeType.ALL,
                fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name = "address_id")
    private Address address;

    @NotNull
    @Size(min=10, max=10, message = "Must be 10 digits only")
    private String phone;

   // setters/getters
}

Address实体:

@Entity
@Table(name = "address")
public class Address {

    @Id
    @GeneratedValue
    @Column(name = "address_id")
    private int id;

    @NotNull
    @Size(min=1, message = "Can not be empty")
    @Column(name = "street")
    private String street;

    @NotNull
    @Size(min=1, message = "Can not be empty")
    @Column(name = "city")
    private String city;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(name = "state")
    private State state;

    @NotNull
    @Size(min=5, max=5, message = "Invalid")
    @Column(name = "zip_code")
    private String zipCode;

    @OneToOne(mappedBy = "address" , fetch = FetchType.EAGER)
    //@JoinColumn(name = "client_id")
    public Client client;

    // setters and getters
}

【问题讨论】:

    标签: java hibernate validation spring-boot hibernate-validator


    【解决方案1】:

    Client 类中,将@Valid 添加到address 字段:

    @Valid
    @OneToOne(cascade = CascadeType.ALL, 
                fetch = FetchType.EAGER, 
                optional = false)
    @JoinColumn(name = "address_id")
    private Address address;
    

    @Valid javadoc 说:

    public @interface Valid

    标记属性、方法参数或方法返回类型 验证级联。

    【讨论】:

    • @KevinG 欢迎您。如果有帮助,请随时接受答案。编码愉快!
    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2015-07-29
    • 2018-06-26
    • 2022-11-05
    相关资源
    最近更新 更多