作者:手机用户2502926207 | 来源:互联网 | 2023-08-26 01:14
篇首语:本文由编程笔记#小编为大家整理,主要介绍了缺少的请求参数包含在主体中相关的知识,希望对你有一定的参考价值。
我发布一个POJO时出现错误,提示未包含该字段。
Asset POJO
public class Asset {
private MultipartFile[] files;
private String name;
private String meta;
//Constructor/Getters n Setters
}
资源方法
@PostMapping("asset")
public ResponseEntity uploadAsset(@RequestParam("asset") Asset asset) {
System.out.println(asset);
return new ResponseEntity(HttpStatus.ACCEPTED);
}
PostMan JSON正文
{
"asset" : {
"files": [
"@/home/Downloads/1.jpeg",
"@/home/Downloads/2.jpeg"
],
"name": "assetName",
"meta": "assetMeta"
}
}
PostMan JSON响应
{
"timestamp": "2019-10-29T20:46:19.536+0000",
"status": 400,
"error": "Bad Request",
"message": "Required Asset parameter 'asset' is not present",
"path": "/asset"
}
我不明白为什么将Required Asset parameter 'asset' is not present
消息放入JSON正文中的原因。有什么想法吗?
答案
使用@RequestBody
而不是@RequestParam
public ResponseEntity uploadAsset(@RequestBody Asset asset) {
另一答案
根据您的有效负载,Spring期望一个看起来像这样的对象:
public class SomeClass {
private Asset asset;
}
将您的有效负载更改为如下所示:
{
"files": [
"@/home/Downloads/1.jpeg",
"@/home/Downloads/2.jpeg"
],
"name": "assetName",
"meta": "assetMeta"
}
另一答案
RequestParam
表示方法参数应绑定到Web请求参数的注释。
RequestBody
指示方法参数的注释应绑定到Web请求的正文。请求的主体通过HttpMessageConverter传递,以根据请求的内容类型解析方法参数。 (可选)可以通过使用@Valid注释自变量来应用自动验证。
HttpMessageConverter
策略接口,指定可以在HTTP请求和响应之间进行转换的转换器。
您需要检查转换器的依赖性。因为您使用的是apllication / json。
com.fasterxml.jackson.core
jackson-databind
2.9.8
Q:主体中包含缺少的请求参数
A:您可以使用@RequestBody注释。