【发布时间】:2014-11-15 01:27:45
【问题描述】:
我在同样的问题上找到了很多答案,但仍然没有一个对我有用:(而且我已经厌倦了我的误解。问题很清楚:我通过 @RequestBody 将 JSON 字符串传递给 Spring 控制器和得到“400 Bad Request”响应。当我使用@ModelAttribute - 一切正常,但所有值都是空的。
我正在使用 POSTman 发送请求。这是代码:
控制器:
@RequestMapping(value = "/create", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody User createUser(@RequestBody User user) {
logger.info("UserController -> createUser call made");
if (user != null) {
logger.info("UserController -> createUser(" + user.toString() + ")");
} else {
logger.info("UserController -> createUser(null)");
}
user.setCreatedDate(new Date());
return userService.createUser(user);
}
实体类:
@Entity
@Table(name = "users")
@XmlRootElement
public class User implements Serializable {
@Id
@GeneratedValue
private int id;
private String firstName;
private String lastName;
@Transient
private String name;
private String email;
/*
* 1 - male
* 0 - female
*/
private boolean gender;
private Date createdDate;
@JsonSerialize(using = DateSerializer.class)
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean getGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return getFirstName() + " " +
getLastName() + ", " +
(getGender() ? "male, " : "female, ") +
getEmail() + ", id = " + getId() +
" created on: [" + getCreatedDate() + "]";
}
JSON 已通过:
{"gender":true,"lastName":"Novosad","firstName":"Oleg","createdDate":"Sat Sep 20 16:16:48 EEST 2014","email":"adminnovik@gmail.com"}
Headers: Content-Type:application/json
配置:
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="text/xml" />
</map>
</property>
<property name="defaultContentType" value="text/html" />
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</list>
</property>
</bean>
如果您需要其他信息,请告诉我。感谢您的回答!
更新:
将 spring 的日志设置为“All”后(在 log4j.properties 中放置行:log4j.category.org.springframework=ALL)我发现了问题:Spring 无法解析我希望它解析的日期值。
【问题讨论】:
-
如果你把你的 Spring 日志转为 debug,Spring 会告诉你哪里出了问题。
-
设置“log4j.category.org.springframework=ALL”对我来说非常有用,谢谢。
标签: java json spring spring-mvc bad-request