缺少的请求参数包含在主体中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缺少的请求参数包含在主体中相关的知识,希望对你有一定的参考价值。
我发布一个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"
}
另一答案
表示方法参数应绑定到Web请求参数的注释。
指示方法参数的注释应绑定到Web请求的正文。请求的主体通过HttpMessageConverter传递,以根据请求的内容类型解析方法参数。 (可选)可以通过使用@Valid注释自变量来应用自动验证。
策略接口,指定可以在HTTP请求和响应之间进行转换的转换器。
您需要检查转换器的依赖性。因为您使用的是apllication / json。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
Q:主体中包含缺少的请求参数
A:您可以使用@RequestBody注释。
以上是关于缺少的请求参数包含在主体中的主要内容,如果未能解决你的问题,请参考以下文章