我在发布POJO时出现错误,提示未包含该字段。
设置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"
}
我不明白为什么将JSON正文中的Required Asset parameter 'asset' is not present
消息接收到。有什么想法吗?
答案 0 :(得分:1)
使用@RequestBody
而不是@RequestParam
public ResponseEntity uploadAsset(@RequestBody Asset asset) {
答案 1 :(得分:0)
基于您的有效负载,Spring期望一个看起来像这样的对象:
public class SomeClass {
private Asset asset;
}
将您的有效负载更改为以下形式:
{
"files": [
"@/home/Downloads/1.jpeg",
"@/home/Downloads/2.jpeg"
],
"name": "assetName",
"meta": "assetMeta"
}
答案 2 :(得分:0)
注释,指示方法参数应绑定到Web请求参数。
指示方法参数的注释应绑定到Web请求的正文。请求的主体通过HttpMessageConverter传递,以根据请求的内容类型解析方法参数。 (可选)可以通过使用@Valid注释自变量来应用自动验证。
策略接口,指定可以在HTTP请求和响应之间进行转换的转换器。
您需要检查转换器依赖性。因为您使用的是application / json。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
Q:正文中缺少请求参数
A:使用@RequestBody
批注。
答案 3 :(得分:0)
我尝试了@Jordans答案,并在所有值都设置为null的情况下调用了端点:(
进行更多研究后,我发现此声明https://stackoverflow.com/a/51982230/2199102并进行了尝试。
结合@Jordans答案,然后更改注解,我能够得到想要的答案