使用邮递员测试具有RequestParam的其余服务

Ne *_* AS 1 java json spring-boot postman

我想测试我的REST服务,以便使用Postman保存具有特定类别(manyToOne)的产品:

这是我的要求的正文:

{
    "categoryId": 36,
    "product": {
        "code": "code1",
        "name": "product1",
        "price": 20
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我的REST服务方法的签名的样子:

@RequestMapping(value = "/addProduct", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ProductBean> add(@RequestParam(value ="categoryId") Long id, @RequestParam(value = "product") ProductBean productBean)
Run Code Online (Sandbox Code Playgroud)

我在URL /addProduct的末尾输入了邮递员的网址,然后选择POST。在主体选项卡中,选择,raw然后选择JSON (application json)。当我发送请求时,我收到了HTTP 400。

如何在Postman中进行测试而没有错误?

编辑

我想使用邮递员对其进行测试,以确保添加前部之前我的REST正常工作。这就是我从前面发送数据的方式

add: function (product, id, successCallBack, failureCallBack) {
        $http({
            method: 'POST',
            url: "/addProduct",
            params: {
                product: product,
                categoryId: id
            },
            headers: {'Content-Type': 'application/json'}
        }).then(successCallBack, failureCallBack);
    }
Run Code Online (Sandbox Code Playgroud)

jny*_*jny 5

您的方法签名不正确。@RequestParam是uri中的参数,而不是请求的正文。它应该是:

 public ResponseEntity<ProductBean> add(MyBean myBean)
Run Code Online (Sandbox Code Playgroud)

必须在哪里 MyBean设置属性:ID和产品或

public ResponseEntity<ProductBean> add(@ModelAttribute(value ="categoryId") Long id, @ModelAttribute(value = "product") ProductBean productBean)
Run Code Online (Sandbox Code Playgroud)

有关映射请求的更多信息,请参见Spring文档。

如果要坚持原始映射,则所有内容都应在查询字符串中传递,而正文中则不应传递任何内容。查询字符串将如下所示:

/addProduction?categoryId=36&product={"code":"code1",...}
Run Code Online (Sandbox Code Playgroud)