一个问题,关于如何为使用@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,测试找不到我的方法,我想我的错误可能是我发送字符串集合的方式,我尝试了其他一些选项,但未成功。

最佳答案

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

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

关于java - Spring Contracts:如何将字符串集合作为RequestBody发送,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59211459/

10-09 09:35