Spring Request Mapping post vs put,相同的方法,相同的逻辑,但是
Posted
技术标签:
【中文标题】Spring Request Mapping post vs put,相同的方法,相同的逻辑,但是【英文标题】:Spring Request Mapping post vs put, same method, same logic, but 【发布时间】:2018-02-20 22:25:17 【问题描述】:我有两种方法: 第一个创建产品:
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> create(@Validated ProductDTO productDTO)
productService.addProduct(productDTO);
return new ResponseEntity<>("Maxsulot ro'yhatga qo'shildi", HttpStatus.OK);
另一个更新产品:
@RequestMapping(method = RequestMethod.PUT)
public ResponseEntity<?> update(@Validated ProductDTO productDTO)
productService.update(productDTO);
return new ResponseEntity<>("Maxsulot ma'lumotlari yangilandi", HttpStatus.OK);
现在,我很惊讶,如果我发送相同的数据 post 方法工作正常(screen1),但 put(screen2) 方法返回验证错误。 屏幕1(帖子)
screen2(放置)
问题是什么? MyDTO 类:
public class ProductDTO
private Long id;
private MultipartFile file;
@NotNull
@Size(min = 2, max = 50)
private String productName;
@NotNull
private Long productPrice;
private String productInfo;
@NotNull
private Long categoryId;
private String unitOfMeasurement;
// getters and setters
【问题讨论】:
什么是魔法,伙计? :) 您能将您的应用程序写入控制台的内容发布出来吗?您可以看到有一些 BindException,从这条消息中您可能能够确定它来自哪里。 你能分享你的DTO对象的代码吗?你有任何 initBinders 吗? 我添加了 Mydto 类 你在使用 Spring Boot 吗?如果不确定,请确保将HttpPutFormContentFilter
添加到您的过滤器列表中。
【参考方案1】:
我可以看到您有 @Validated
应该根据 JSR-303
验证您的请求正文。
POST
和 PUT
似乎不一致。它验证/不验证并返回错误,因为您的正文与您在 ProductDTO
上放置的验证规则不匹配。
在我看到的所有文档中,您应该做类似@Valid @RequestBody
之类的操作,而不是仅仅输入@Validated
。
尝试将其更改为上述内容,看看它现在是否可以更一致地工作。
【讨论】:
如果我将@Validated
更改为 @Valid @RequestBody
,服务器无法解析 Multipart 文件。出现此错误:org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
哇,Put 方法返回错误#415,不支持的 MediaType :-)
这是一个不同的问题,看看这个帖子:link 和 link以上是关于Spring Request Mapping post vs put,相同的方法,相同的逻辑,但是的主要内容,如果未能解决你的问题,请参考以下文章
Thymeleaf with Spring MVC error No mapping found for HTTP request with URI
为啥 Spring MVC 以 404 响应并报告“No mapping found for HTTP request with URI [...] in DispatcherServlet”?
Spring Boot, Java Config - No mapping found for HTTP request with URI [/???] in DispatcherServlet wi
No mapping found for HTTP request with URI [/spring_liu/hello.do] in DispatcherServlet with name
Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决(转)
使用java的spring3.05 mvc注解后出现错误:No mapping found for HTTP request with URI