我有POST請求控制器:春季啓動POST方法JSON數據驗證
@RequestMapping(value="/projects/add", method=RequestMethod.POST)
@ResponseBody
public String addProject(@Valid @RequestBody usersProjects project, BindingResult result) {
if(result.hasErrors()) {
System.out.println("Error ::: " +result.toString());
}
logger.info(project.toString());
usersProjects.addProject(project);
return "ok";
}
實體數據庫表:
@Entity
@Table(name="users_projects")
public class UsersProjects {
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
private Long id;
@NotEmpty
private String name;
private Boolean approved;
@NotEmpty
@ElementCollection
private List<String> spaces;
@NotEmpty
@ElementCollection
private List<String> owners;
@OneToMany(cascade=CascadeType.ALL,
fetch=FetchType.EAGER)
private Set<UsersProjectJobs> jobs;
@OneToMany(cascade=CascadeType.ALL,
fetch=FetchType.EAGER)
private Set<UsersProjectData> data;
public UsersProjects() {
}
public UsersProjects(String name, List<String> spaces, List<String> owners) {
this.name = name;
this.spaces = spaces;
this.owners = owners;
this.approved = false;
}
public Boolean getApproved() {
return approved;
}
public void setApproved(Boolean approved) {
this.approved = approved;
}
}
當我嘗試後,捲曲數據到服務器:
curl -i -H "Content-Type:application/json" -H "Accept:application/json" -X POST -d '{ "name": "123", "spaces": ["123"], "owners": ["123"]}' http://localhost:8080/projects/add
還有錯誤:
客戶端發送的請求在語法上不正確。
我發現很多主題描述了當Spring無法驗證接收到的JSON數據時發生此錯誤。什麼我應該添加到log4j.properties更詳細的輸出或可能有人知道鏈接到關於模型驗證的好主題?
謝謝。
UPD log4j的配置:
# Root logger option
log4j.rootLogger=DEBUG, stdout
log4j.logger.org.springframework=DEBUG, stdout
log4j.logger.org.springframework.beans=DEBUG, stdout
log4j.logger.org.springframework.context=DEBUG, stdout
log4j.logger.org.springframework.http=DEBUG, stdout
log4j.logger.org.springframework.web=DEBUG, stdout
log4j.logger.org.hibernate=DEBUG, stdout
log4j.category.org.springframework.beans.factory=DEBUG, stdout
log4j.logger.org.apache.catalina.core=DEBUG
log4j.logger.org.apache.catalina.session=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
UPD UPD:
public class validatorAddProject {
private String name;
private List<String> spaces;
private List<String> owners;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getSpaces() {
return spaces;
}
public void setSpaces(List<String> spaces) {
this.spaces = spaces;
}
public List<String> getOwners() {
return owners;
}
public void setOwners(List<String> owners) {
this.owners = owners;
}
}
@RequestMapping(value="/projects/add", method=RequestMethod.POST)
@ResponseBody
public String addProject(@Valid @RequestBody validatorAddProject form, BindingResult result) {
if(result.hasErrors()) {
System.out.println("Error ::: " +result.toString());
}
usersProjects project = new usersProjects(form.getName(), form.getSpaces(), form.getOwners());
usersProjects.addProject(project);
return "ok";
}
是完整的'用戶項目'類嗎?這是處理程序方法中的類型嗎?將日誌轉到DEBUG並再次查看。 –
我的log4j.properties文件:http://pastebin.com/6KuuYT61我沒有在這裏看到有關驗證錯誤的任何記錄。是的,這是完整的實體類。 –
你的日誌應該包含你爲什麼得到400的信息。檢查它們。如果他們不這樣做,您的記錄器配置錯誤。 –