缺少的请求参数包含在主体中

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"
}
另一答案

RequestParam

表示方法参数应绑定到Web请求参数的注释。

RequestBody

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

HttpMessageConverter

策略接口,指定可以在HTTP请求和响应之间进行转换的转换器。

您需要检查转换器的依赖性。因为您使用的是apllication / json。

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>

Q:主体中包含缺少的请求参数

A:您可以使用@RequestBody注释。

以上是关于缺少的请求参数包含在主体中的主要内容,如果未能解决你的问题,请参考以下文章

Java中代码优化的30个小技巧

请求缺少必需的参数,包含无效的参数值

Tutorial中代码的区别及不同效果

javascript--函数的声明及调用/JS中代码执行顺序

扩大 rmarkdown html 中代码的输出

Http协议状态码总结