POST不起作用Spring Java

时间:2018-06-22 13:58:32

标签: java spring rest post

我有一个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
}

POST 在响应中,我收到403错误 ”“响应体的类型未知 服务器未提供必需的“内容类型”标头。” 为什么会这样呢?我提到其他GET请求运行正常。 谢谢!

编辑: 当我用邮递员尝试时,收到的错误消息是“无效的CORS请求”

3 个答案:

答案 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预检请求进行内部检查,以查看其要求?