我有处理REST API的Spring应用程序。在我将XML配置转换为注释配置之前,所有方法都运行良好。当时我在一些API中遇到问题。 API是使用@ModelAttribute的PUT请求。该ajax请求的数据未绑定到剩余请求中。
@RequestMapping(method=RequestMethod.PUT,value="/user")
public ResponseEntity<?> updatePlanSponsor(@ModelAttribute UserDTO user,BindingResult errors, @CookieValue(value="userID") Long userId){
------
}
所有其他请求,例如带有application / JSON的PUT,带有multipart / form-data的POST; 如果是包含多部分/表单数据的PUT;表单未绑定到dto类
答案 0 :(得分:1)
我确实错误地添加了多部分解析器。
多部分的PUT请求仅支持PutAwareCommonsMultipartResolver
。 CommonsMultipartResolver
不支持带有Multipart的PUT。
public class PutAwareCommonsMultipartResolver extends CommonsMultipartResolver {
private static final String MULTIPART = "multipart/";
@Override
public boolean isMultipart(HttpServletRequest request) {
return request != null && isMultipartContent(request);
}
/**
* Utility method that determines whether the request contains multipart
* content.
*
* @param request The servlet request to be evaluated. Must be non-null.
*
* @return <code>true</code> if the request is multipart; {@code false}
* otherwise.
*
* @see ServletFileUpload#isMultipartContent(HttpServletRequest)
*/
public static final boolean isMultipartContent(HttpServletRequest request) {
final String method = request.getMethod().toLowerCase();
if (!method.equals("post") && !method.equals("put")) {
return false;
}
String contentType = request.getContentType();
if (contentType == null) {
return false;
}
if (contentType.toLowerCase().startsWith(MULTIPART)) {
return true;
}
return false;
}
}