【发布时间】:2013-04-14 21:55:57
【问题描述】:
我正在尝试找出在我的 Spring MVC 应用程序中显示正确验证消息的方法。
这是示例 Bean:
@Entity
@Table(name="employees")
public class Person {
private Integer person_id;
private String name;
private String name2;
private String email;
private double phone;
private String desc;
@Id
@Max(value=500)
@Column (name="id")
public Integer getPerson_id() {
return person_id;
}
public void setPerson_id(Integer person_id) {
this.person_id = person_id;
}
@NotNull
@NotEmpty
@Column (name="fn")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="ln")
public String getName2() {
return name2;
}
public void setName2(String name2) {
this.name2 = name2;
}
@Email
@Column (name="em", unique = true)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name="phone")
public double getPhone() {
return phone;
}
public void setPhone(double phone) {
this.phone = phone;
}
@Column (name="de")
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String toString() {
return getName() + " - " + getName2() + " - " + getEmail();
}
}
我的控制器方法:
//POST
@RequestMapping(value="/persons", method = RequestMethod.POST, headers="Accept=*/*",
consumes="application/json")
public String getAllPersons(@RequestBody @javax.validation.Valid Person p, BindingResult br){
System.out.println( br.getAllErrors());
personService.savePerson(p);
return "redirect:persons.htm"; // redirects to the method below.
}
//GET
@RequestMapping(value="/persons", method = RequestMethod.GET, headers="Accept=*/*",
produces="application/json")
@ResponseBody
public List<Person> getAllPersons(){
List<Person> persons = personService.listPersons();
for (Person person : persons) {
System.out.println(person.getEmail());
}
if ( persons == null ) {
return null;
}
return persons;
}
这工作正常。但是当出现验证错误时。我只是收到简单的消息:
validation failed for: com.springmvcsample.controller.Person
没有字段和验证失败。
如何获取验证失败的字段名?我认为我无法从 BindingResults 对象中获取归档名称。
我已经搜索了一个示例。但我得到了各种各样的例子,但没有像我需要做的那样。
我的异常处理方法:
@ExceptionHandler(Exception.class)
@ResponseBody
public String handleException( Exception e ) {
return e.getMessage();
}
【问题讨论】:
-
收到验证错误时有哪些 POST 数据?
-
不确定我是否理解您的问题。我正在发布 id > 500 的 JSON 以查看验证是否有效。有用。但我得到了上述概括性信息。
-
看看API of
BindingResult。那里有一些方法,比如getFieldError(),会返回受影响的字段。 -
谢谢。我会试试的。在使用 Spring MVC / REST 处理异常/错误时,您可能遇到过任何示例吗?我想了解这里的标准做法。
-
不知道这里有没有标准。我通常使用
BindingResult#hasErrors()检查错误,然后使用BindingResult#getAllErrors()返回List<ObjectError>,然后使用ObjectError#getDefaultMessage()记录错误并返回错误页面。请记住,您实际上可以在验证注释中设置自己的错误消息。
标签: java rest spring-mvc error-handling bean-validation