Spring 带有@ModelAttribute 的 Mvc 应用程序 PUT 请求,多部分请求表单未绑定
Spring Mvc application PUT request with @ModelAttribute with multipart request form not binding
我有 Spring 处理 REST API 的应用程序。在我将 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){
------
}
所有其他请求,例如 PUT application/JSON、POST 和 multipart/form-data;
如果使用 multipart/form-data 进行 PUT;表单在 dto class
中没有绑定
我确实错误地添加了多部分解析器。
多部分 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;
}
}
我有 Spring 处理 REST API 的应用程序。在我将 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){
------
}
所有其他请求,例如 PUT application/JSON、POST 和 multipart/form-data; 如果使用 multipart/form-data 进行 PUT;表单在 dto class
中没有绑定我确实错误地添加了多部分解析器。
多部分 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;
}
}