伙计们,好吧,我已经做了足够的研究,但我仍然找不到解决这个问题的方法。
简而言之,我只是将 url 编码的表单数据传递给 Controller 方法,并尝试将其转换为具有日期和整数的域对象。
@RequestMapping(value = "/savePassport", method = RequestMethod.POST)
public @ResponseBody
AjaxResponse savePassport(@RequestBody StaffPassport passport, HttpServletResponse response) {
// Some operations.
员工护照是这样的:
import java.sql.Date;
public class StaffPassport {
private int staffId;
private String passportNumber;
private String placeOfIssue;
private Date issueDate;
private Date expiryDate;
private String spouseName;
private String oldPassportRef;
private String visaInfo;
private String description;
//gets/sets
}
当我调用/savePassport 时,出现不受支持的媒体异常。我想这与类型转换有关。
我不能正常工作。当然,我可以使用 @RequestParam 捕获单个表单数据并手动进行转换,但这不是框架的重点,不是吗?
我哪里错了?你是对的。我是 Spring 的初学者,但我喜欢它。
最佳答案
看起来您使用了错误的注释。 @RequestBody
用于请求正文中包含任意内容的请求,例如 JSON、某些应用程序定义的 XML、逗号分隔的变量……等等。并使用您在调度程序 servlet 中配置的编码器将其转换为对象。
如果您只想让 Spring 为您将一个普通的旧表单绑定(bind)到支持对象,则方法参数上的正确注释是 @ModelAttribute
。
关于java - 将@RequestBody 转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5889973/