邮政编码不';t工作SpringJava

邮政编码不';t工作SpringJava,java,spring,rest,post,Java,Spring,Rest,Post,我有一个web应用程序,我正在尝试创建一个简单的POSt方法,该方法将在body请求中包含一个值: @RequestMapping(value = "/cachettl", method = RequestMethod.POST) @CrossOrigin(origins = "http://localhost:3000") public @ResponseBody String updateTtl(@RequestBody long ttl) { /////Code } 我从某个rest

我有一个web应用程序,我正在尝试创建一个简单的POSt方法,该方法将在body请求中包含一个值:

@RequestMapping(value = "/cachettl", method = RequestMethod.POST)
@CrossOrigin(origins = "http://localhost:3000")
public @ResponseBody String updateTtl(@RequestBody long ttl) {
  /////Code
}
我从某个rest客户端调用的请求是:

POST
http://localhost:8080/cachettl
Body:
{
 "ttl": 5
}
在响应中,我得到403 error“响应主体的类型未知 服务器未提供必需的“内容类型”标题。“ 为什么会这样?我提到其他GET请求工作得很好。 谢谢

编辑:
当我尝试使用postman时,得到的错误消息是“无效的CORS请求”

Spring应用程序不知道如何解析消息的正文。 您应该为POST请求提供“头”,告诉Spring如何解析它

您的案例中的“内容类型:application/json”

您可以在此处阅读有关http方法的更多信息:

更新:

在调试的情况下,删除无用的注释以只测试POST机制。另外,更改arg的类型和返回类型。并尝试使用区分大小写的标题

@RequestMapping(value = "/cachettl", method = RequestMethod.POST)
public void updateTtl(@RequestBody String ttl) {
  System.out.println("i'm working");
}

由于错误与响应类型有关,应考虑添加<代码>产生< /COD>属性,即:

@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)

错误消息有点误导。由于身份验证错误,未命中您的服务器代码

既然你说
spring-security
不起作用,那么我怀疑你被CORS违规所反弹,可能是因为请求方法的限制。此故障生成的响应体(如果有)是自动的,不会是
应用程序/json
类型,因此客户端故障。我怀疑如果你用一些与CORS无关的东西(比如
curl
)击中端点,那么它就会起作用


您的浏览器REST客户端是否允许您内省CORS飞行前请求,以查看它的要求?

您如何调用此REST端点?来自邮递员或其他客户或其他程序。您需要设置内容类型headerI添加了一个屏幕截图。我把标题放进去,还是一样的问题。我使用的是“Restlet”client您是否使用错误消息中提供的拼写进行了尝试?@DaveNewton标题不区分大小写。403与身份验证有关。我不知道什么是拼写提供程序。我添加了一个屏幕截图。我放了头,仍然是同一个问题。同一个问题:(@BD111-你能从你的应用程序中附加日志吗?另外,如果没有可用的日志,你可以将日志级别设置为“debug”,我不知道如何获取这些日志。你能指导我吗?@BD111-设置日志级别在哪里可以找到日志文件:不幸的是,仍然是同一个问题:(我想你是对的。当我与postman一起尝试时,我收到了一条错误消息“无效CORS请求”。关于你的问题,我不知道。我如何检查它?是否有任何选项可以通过spring配置/依赖项来修复它?谢谢!好的,我成功地做到了:,但我的函数得到的参数(ttl)中有一个奇怪的值关于WebKitFormBoundary和许多随机字符,它是什么?我如何获得我的真正价值?此外,如果我不通过某个rest客户端调用它,它会工作吗?