【发布时间】: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