【问题标题】:Spring Contracts: how to send a Collection of Strings as a RequestBodySpring Contracts:如何将字符串集合作为 RequestBody 发送
【发布时间】:2019-12-06 10:36:07
【问题描述】:

关于如何为使用@RequestBody 注释的方法编写合约的问题,该方法将字符串集合作为参数。 我有以下方法:

    @PostMapping(path = "/some/uri", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation("GET with body")
    public Response<Boolean> someMethod(@RequestParam(value = "key") final String key,
                                        @RequestBody final Collection<String> numbers){
        return some logic;
    }

并且我已经为测试目的编写了以下合同:


import org.springframework.cloud.contract.spec.Contract


Contract.make {
    description "Should return true"
    request {
        method POST()
        url("/some/uri?key=NEW_KEY")
        body'''["12345",
                "00143"]'''
    }
    response {
        status 200
        headers {header 'Content-Type': 'application/json;charset=UTF-8'}
        body '''true'''
    }

我一直收到 415,测试找不到我的方法,我想我的错误可能是我发送字符串集合的方式,我尝试了一些其他选项但没有成功。

【问题讨论】:

  • 您可以尝试使用您的密钥和数字集合作为其中的字段来创建一个 DTO,然后使用 @RequestBody 将其作为参数传递给您的方法
  • body 没问题,试试用List 代替Collection

标签: java spring groovy contract


【解决方案1】:

我尝试了上面的建议,但不幸的是它们都没有解决我的问题。我得到 415 的原因是,当我在请求中添加正文时,也在后台对正文的内容类型进行了检查,因此我必须在请求中明确指定正文为 json 格式:

request {
        method POST()
        url("/some/uri?key=NEW_KEY")
        headers {header 'Content-Type': 'application/json;charset=UTF-8'}
        body'''["12345",
                "00143"]'''
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多