spring controller returns 404 with post and file with get 生成responseentity

spring controller returns 404 with post and file with get to generate responseentity

我有一个用@RestController 注释的控制器和一个映射 returns ResponseEntity 与 spring 4.3

该方法接收带有数据的表单以生成文件,但是如果我使用 GET 方法请求文件 url 它会生成文件,但是如果我使用 POST 请求文件方法 url, spring returns 404

@RequestMapping("/request")
@RestController 
MyController {

    @RequestMapping("/notes.do")
    ResponseEntity<byte[]> notes(HttpServletRequest request, HttpServletResponse response, Principal principal, NotesForm form) {
        return createResponseEntity(form);
    }
}

我从 weblogic 的 access.log

得到这个
127.0.0.1 - - [05/abr/2017:19:11:06 -0500] "GET /app-web/request/notes.do?noteType=DATA&noteContent=HELLO HTTP/1.1" 201 35602
127.0.0.1 - - [05/abr/2017:19:12:29 -0500] "POST /app-web/request/notes.do HTTP/1.1" 404 1322

这是获取请求header的请求

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,es;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Cookie:theme=siirfe-pink;     SIIRFESESS=XKdAssgx6p_kr8OFTRqYQa7IKG8nrIXZr5lO1Ns8lpWE1pFSqfwf!-2083194325!NONE
Host:wlcap1:9102
Pragma:no-cache
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.

而请求 header 为 post 请求

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,es;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Content-Length:103
content-type:application/x-www-form-urlencoded;charset=UTF-8
Cookie:theme=siirfe-pink; SIIRFESESS=XKdAssgx6p_kr8OFTRqYQa7IKG8nrIXZr5lO1Ns8lpWE1pFSqfwf!-2083194325!NONE
Host:wlcap1:9102
Origin:http://wlcap1:9102
Pragma:no-cache
Referer:http://wlcap1:9102/app-web/dictaminacion
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36

这是获取请求的响应:

Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Content-Disposition:form-data; name="attachment"; filename="ARCHIVO.DOCX"
Content-Length:35602
Content-Type:application/docx
Date:Thu, 06 Apr 2017 00:39:04 GMT
Expires:0
Pragma:no-cache
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-ORACLE-DMS-ECID:8ac7d542-7157-4b0a-8190-f8e69f03a454-00001af0
X-ORACLE-DMS-RID:0
X-XSS-Protection:1; mode=block

post 请求的响应只是一个错误页面。

有什么方法可以从 post 请求中获取文件,还是我遗漏了什么?

根据日志,两种情况下一切似乎都很好(在两种情况下,控制器都会运行到请求的 return)

post 请求时 ResponseEntity 上的内容:

201 Created,[B@1e6804c8,{Content-Type=[application/docx], Content-Disposition=[form-data; name="attachment"; filename="ARCHIVO.DOCX"]}

获取请求时ResponseEntity上的内容:

201 Created,[B@39cb5a1a,{Content-Type=[application/docx], Content-Disposition=[form-data; name="attachment"; filename="ARCHIVO.DOCX"]}

我没有发现任何错误信息。

更改 post 请求上的接受 header 解决了问题。 我不确定为什么会出现问题,因为它列出了 */ *(忽略 space,不知道如何让评论正确显示它)作为最后一个选项,但删除了 application/json 和 text/plain 解决了问题