我有一个用@RestController注释的控制器,映射返回带弹簧4.3的ResponseEntity
该方法接收带有数据的表单以生成文件,但是如果我使用GET方法请求文件url它会生成文件,但如果我使用POST方法请求文件url,则spring返回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¬eContent=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
这是获取请求的请求标头
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.
发布请求的请求标头
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
发布请求的响应只是一个错误页面。
我有什么方法可以从邮寄请求中获取文件,或者我错过了什么?
根据日志,两种情况下的一切似乎都很好(在两种情况下,控制器都会在请求返回之前运行)
发布请求时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"]}
我没有找到任何错误消息。
答案 0 :(得分:0)
更改发布请求中的Accept标头可解决问题。 我不确定为什么它是一个问题,因为它列出* / *(忽略空格,不知道如何让注释正确显示)作为最后一个选项,但删除application / json和text / plain解决了问题