【问题标题】:Test rest service having RequestParam using postman使用邮递员测试具有 RequestParam 的休息服务
【发布时间】:2017-09-15 21:41:04
【问题描述】:

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

这是我的请求的正文:

{
    "categoryId": 36,
    "product": {
        "code": "code1",
        "name": "product1",
        "price": 20
    }
}

这就是我的 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)

我在 Postman 中输入我的 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);
    }

【问题讨论】:

    标签: java json spring-boot postman


    【解决方案1】:

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

     public ResponseEntity<ProductBean> add(MyBean myBean)
    

    其中MyBean 具有属性:id 和产品或

    public ResponseEntity<ProductBean> add(@ModelAttribute(value ="categoryId") Long id, @ModelAttribute(value = "product") ProductBean productBean)
    

    有关映射请求的更多信息,请参阅Spring documentation

    如果你想坚持你原来的映射,那么所有的东西都应该在查询字符串中传递,而不是在正文中传递。 查询字符串看起来像这样:

    /addProduction?categoryId=36&product={"code":"code1",...}
    

    【讨论】:

    • 如果我想使用 RequestParam 测试它怎么办?我该怎么做?
    • 查看我的编辑,但您应该真正考虑在请求正文中从 ui 传递数据并使用 data 而不是 params
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2018-06-21
    • 2018-09-24
    相关资源
    最近更新 更多