gpt4 book ai didi

java - Spring Mvc 应用程序 PUT 请求带有 @ModelAttribute 且多部分请求表单未绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 01:59:54 25 4
gpt4 key购买 nike

我有处理 REST API 的 Spring 应用程序。在我将 XML 配置转换为注释配置之前,一切都运行良好。当时我在几个API上遇到了问题。 API 是带有 @ModelAttribute 的 PUT 请求。 ajax 请求的数据未在其余请求中绑定(bind)。

@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; 如果使用 multipart/form-data 进行 PUT;表单未绑定(bind)在 dto 类中

最佳答案

我确实错误地添加了多部分解析器。具有多部分的 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;
}

}

关于java - Spring Mvc 应用程序 PUT 请求带有 @ModelAttribute 且多部分请求表单未绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51759905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com