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 请求仅支持 PutAwareCommonsMultipartResolverCommonsMultipartResolver 不支持 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;
    }

}