我有一个Web应用程序,正在尝试创建一个简单的POSt方法,该方法在主体请求中将具有一个值:
@RequestMapping(value = "/cachettl", method = RequestMethod.POST)
@CrossOrigin(origins = "http://localhost:3000")
public @ResponseBody String updateTtl(@RequestBody long ttl) {
/////Code
}
我从其他闲暇客户那里打来的请求是:
POST
http://localhost:8080/cachettl
Body:
{
"ttl": 5
}
在响应中,我收到403错误 ”“响应体的类型未知
服务器未提供必需的“内容类型”标头。”
为什么会这样呢?我提到其他GET请求运行正常。
谢谢!
编辑: 当我用邮递员尝试时,收到的错误消息是“无效的CORS请求” 。
答案 0 :(得分:1)
Spring应用程序只是不知道如何解析消息的正文。 您应该为POST请求提供“标头”,以告诉Spring如何解析它。
“ Content-type:application / json”(您的情况)。
您可以在此处阅读有关http方法的更多信息:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_and_retrieving_form_data
已更新:
仅在调试时,删除无用的注释即可仅测试POST机制。另外,更改arg的类型和返回类型。并尝试使用区分大小写的标头。
@RequestMapping(value = "/cachettl", method = RequestMethod.POST)
public void updateTtl(@RequestBody String ttl) {
System.out.println("i'm working");
}
答案 1 :(得分:0)
由于错误与响应类型有关,因此您应该考虑添加produces
属性,即:
@RequestMapping(value = "/cachettl", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
由于您还使用JSON,因此添加consumes
属性也不会造成任何损害:
@RequestMapping(value = "/cachettl", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE, produces=MediaType.APPLICATION_JSON_VALUE)
答案 2 :(得分:0)
该错误消息有点误导。由于身份验证错误,未击中您的服务器代码。
由于您说spring-security
不在比赛中,所以我怀疑您是由于请求方法的限制而被CORS违规退回的。由该故障生成的响应正文(如果有的话)是自动的,不会是application/json
类型,因此是客户端故障。我怀疑如果您使用诸如curl
之类的不适用于CORS的东西达到终点,那么它将起作用。
您的浏览器REST客户端是否允许您对CORS预检请求进行内部检查,以查看其要求?