Spring WebClient放置映射:不支持内容类型“ application / json”

时间:2018-09-16 19:58:14

标签: java rest spring-boot spring-webflux spring-web

我正在尝试使用WebClient通过REST调用另一项服务,但是我总是收到错误消息:

  

org.springframework.web.reactive.function.UnsupportedMediaTypeException:不支持内容类型'application / json'

所有分配具有相同版本的依赖关系,通过Postman调用资源可以正常工作。问题是当第一个作为代理(客户端)的应用程序尝试调用第二个(服务)

我的服务器资源:

@RequestMapping(value = "/properties")
@PutMapping(consumes = APPLICATION_JSON_UTF8_VALUE)
@ResponseStatus(CREATED)
public void saveProperty(@Valid @RequestBody PropertyForm form) {
    service.save(new PropertyImpl(form));
}

我的客户资源:

WebClient client = WebClient.create(serviceUrl);

Mono<Void> save(PropertyForm form) {
    return client.put()
            .uri("properties")
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .body(BodyInserters.fromObject(form))
            .retrieve()
            .bodyToMono(Void.class);
}

我的build.gradle文件:

dependencies {
    compile "org.springframework.boot:spring-boot-starter-reactor-netty:2.0.4.RELEASE"
    compile "org.springframework.boot:spring-boot-starter-web:2.0.4.RELEASE"
    compile "org.springframework:spring-webflux:5.0.4.RELEASE"

    compile "javax.xml.bind:jaxb-api:2.3.0"
}

我缺少一些依赖项来启用JSON contentType吗?这个例子很简单,但对我来说也很成问题。

表单模型:

class PropertyForm {

    private String group;
    private String key;
    private String value;
    // getters & setters
}

来源:https://gitlab.com/Berilzar/Sandbox

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。问题出在发送表单中。表单的范围是打包程序,与设置程序/获取程序相同。在将PropertyForm提取到API模块并将所有内容公开之后,它就可以正常工作了。

因此解决方案是将表单替换为:

public class PropertyForm {

    private String group;
    private String key;
    private String value;
    // public getters & setters
}

感谢您的帮助和时间。