正文中包含缺少的请求参数

时间:2019-10-29 21:00:55

标签: java spring rest file postman

我在发布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消息接收到。有什么想法吗?

4 个答案:

答案 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)

RequestParam

注释,指示方法参数应绑定到Web请求参数。

RequestBody

指示方法参数的注释应绑定到Web请求的正文。请求的主体通过HttpMessageConverter传递,以根据请求的内容类型解析方法参数。 (可选)可以通过使用@Valid注释自变量来应用自动验证。

HttpMessageConverter

策略接口,指定可以在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答案,然后更改注解,我能够得到想要的答案