Spring MVC ModelAttribute字段是空的而不是表单输入值

我正在尝试制作一个发布CardRequestResource的表单:

public class CardRequestResource extends ResourceSupport{ private Long cardRequestId; private String deliveryMethod; private String address; private boolean isHomeDelivery; private String requestDate; private String expectedDate; private String comments; private Long statusId; private PersonResource person; //Getters and Setters } 

在我的控制器中,我首先加载JSP并将一个空的CardRequestResource添加到ModelMap:

 @RequestMapping(value = { "", "/approval" }, method = RequestMethod.GET) public String getApproval(ModelMap map) { map.put("cardRequestResource", new CardRequestResource()); return "cardoffice/approval"; } 

我的JSP使用cardRequestResource模型属性构建表单:

 

Javascript函数进行AJAX调用以填充表单值:

 function getCardRequestDetails(cardRequestUrl) { $.ajax({ type : "GET", url : cardRequestUrl, dataType : "json", success : function(response) { loadCardRequestDetails(response); }, error : function(response) {} }); }; function loadCardRequestDetails(cardRequest) { $("#statusId").attr("value", cardRequest.statusId); $("#commentTextarea").val(cardRequest.comments); } 

此时,用户可以更新评论文本区域,并且隐藏的输入可以有条件地改变用户在该字段中输入的内容。 然后在提交表单时,我调用以下Javascript函数:

 function postCardRequest(url) { var serialized = $("#detailForm").serialize(); alert(serialized); $.ajax({ type: "POST", url: url, data: serialized, contentType: "application/json", dataType: "json" }); } 

警报显示字段使用最初由AJAX / Javascript或用户加载的数据正确填充。 但是,当我到达处理post的控制器中的处理程序时,CardRequestResource为非null,但其中的EVERY SINGLE字段为NULL!

处理程序代码:

 @RequestMapping(value = "/approval/submit", method = RequestMethod.POST) public @ResponseBody Map postCardRequest(@ModelAttribute(value = "cardRequestResource") CardRequestResource cardRequestResource) { Map responseMap = new HashMap(); final String success = "success"; Boolean isSuccessful = Boolean.FALSE; if(cardRequestResource != null){ isSuccessful = Boolean.TRUE; } //TODO System.out.println("Status: " + cardRequestResource.getStatusId() + ", Comments: " + cardRequestResource.getComments()); responseMap.put(success, isSuccessful); return responseMap; } 

所以我想我找到了perp!

这个小伙伴就在POST AJAX电话中:

 contentType: "application/json", 

我最初是将JSON发送给我的控制器,然后我了解到Spring MVC有那个漂亮的ModelAttribute注释,所以我不必担心在POST期间转换为/从JSON转换。 不幸的是,我没有考虑删除那个contentType行,并且人们会认为它会抛出错误或其中的某些东西仍在那里……显然不是。 绑定中的NULL值和无效调试的小时数…

删除该行后,我开始在CardRequest属性中获取数据而不是NULL!

尝试将以下代码放在aplication-context.xml中。 如果您的表单为encType='multipart/form-data'这可能是解决方案。