【问题标题】:400 Bad request on a POST servicePOST 服务上的 400 错误请求
【发布时间】:2021-02-26 12:02:27
【问题描述】:

我正在尝试为使用 JSON 的 Jersey RS 构建 Java Web 服务的 POST 方法,但是当我提交一些示例 JSON 时收到 400 错误请求错误。

@Path("/Register")
@Stateless
public class RegistrationController {

    @POST
    @Path("/Test")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public String postHelloWorld(String message){
        return "temp";
    }

以上是post方法的代码,当我尝试使用Postman等API服务提交post请求时

http://localhost:37846/Register/Test

使用 Postman 将 Content-Type 的 header 设置为 application\json,并带有一些示例 JSON,例如

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

我收到 400 bad request 错误。


响应正文:

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>GlassFish Server Open Source Edition 4.1.1 - Error report</title>
    <style type="text/css">
        <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}HR {color : #525D76;}-->
</style>
</head>

<body>
    <h1>HTTP Status 400 - Bad Request</h1>
    <hr/>
    <p><b>type</b> Status report</p>
    <p><b>message</b>Bad Request</p>
    <p><b>description</b>The request sent by the client was syntactically incorrect.</p>
    <hr/>
    <h3>GlassFish Server Open Source Edition  4.1.1 </h3>
</body>

</html>

尝试使用 System.out 打印消息失败,通用 system.out.print("hello") 消息也是如此,这让我相信没有调用该方法。
由于我没有收到 404 错误,并且当我调整数据类型时,我会收到 415 Unsupported Media type 错误,这排除了诸如不正确映射之类的问题。
JSON 没有格式错误,因此问题可能在于提交的请求或 Web 服务如何处理请求。

【问题讨论】:

  • 调试程序!打印传入的message。请求是否适用于不使用 JSON 的方法?
  • 400 Bad Request 意味着 /test 端点期望的参数与您发送的不同。您是否使用 JSON 对象映射器,例如 Jackson?如果是这样,您需要创建一个对象,该对象包含与 JSON 中的菜单相同的值(Id、值、弹出窗口)
  • 400 表示您大部分时间都在发送错误数据。您确定没有带有错误描述的响应正文吗?好的服务应该有。
  • 同意@JakeMiller 但尝试在字符串消息前添加“@RequestBody”。如果这是您真正想要的,您可能会将所有帖子正文作为字符串。否则按照杰克的建议去做。
  • @Andrew 你仍然可以使用 System.out.println

标签: java


【解决方案1】:

问题是标题中的拼写错误。

Content-Type application\json

是导致 400 错误的原因。
解决问题的标头是

Content-Type application/json

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2012-04-27
    • 2015-11-24
    • 2015-10-07
    相关资源
    最近更新 更多