java - PostMapping 无法识别 RequestBody
问题描述
所以我的问题如下。我在控制器中实现了一个新端点,如下所示:
@PostMapping("{inventoryNumber}/status")
public UpdateStatusResponse updateDeviceStatus(@PathVariable String inventoryNumber, @RequestBody UpdateStatusRequest updateStatusRequest)
{
return deviceService.updateStatus(inventoryNumber, updateStatusRequest);
}
那是端点中我的控制器类的标题:
@RestController
@RequestMapping("/api/devices/")
public class DeviceController {
private final DeviceService deviceService;
这是 UpdateStatusRequest,它还有 getter、setter、equals 和 hashcode 方法。
public class UpdateStatusRequest {
@JsonProperty("status")
private String status;
public UpdateStatusRequest(String status)
{
this.status = status;
}
我尝试使用适当的邮递员请求和 json 正文(不幸的是我还不能上传图片)来测试我的方法,但我的正文看起来像这样:
{
"status": "NEWCONFIG"
}
但我每次都会收到一个 400 错误请求。我已经发现,它不识别 Body,所以它不运行方法。当我移除身体时,它会起作用。当我将第二个属性放入 UpdateStatusRequest(和邮递员请求)时,它也可以工作。您知道为什么它不起作用并为我提供解决方案吗?(更可取的是一个解决方案,它适用于@RequestBody 而不是@RequestParam)
解决方案
什么是发布请求正文格式?你用杰克逊来序列化身体吗?通常Bad-Request
当杰克逊无法序列化正文时会给出响应。
编辑:您可能必须添加implements Serializable
有效负载类。
您可以测试序列化本身并查看您得到的序列化错误。这是JSON
格式的序列化测试示例
@Test
public void serializeTest() throws IOException {
String jsonString =
"{" +
"\"myKey\" : 11" +
"}";
ObjectMapper mapper = new ObjectMapper();
MyClass object = mapper.reader().forType(MyClass.class).readValue(jsonString);
System.out.println(object);
}
推荐阅读
- flutter - pubspec.yaml 没有 SDK 下限约束
- python - 为什么 if 和 else 语句都被执行 {python}
- java - 无法从 String 获取 OffsetDateTime
- android - 尝试使用 appium 连接到模拟器。收到“无法连接到 localhost/127.0.0.1:4723”
- java - 在 Java 中使用 JSON 创建对象
- java - 导入 javax.servlet 在 Eclipse 中不起作用
- google-cloud-build - 使用具有秘密管理器优势的云构建运行声纳扫描仪时出错
- angular - 在不在组件中的类中调用服务
- node.js - 使用axios调用api时无法从api下载文件响应
- html - 我在 .html 或 .css 中的白色部分有问题 我不知道我是编码新手