Java Spring WebClient put映射:内容类型';application/json';不支持

Java Spring WebClient put映射:内容类型';application/json';不支持,java,rest,spring-boot,spring-webflux,spring-web,Java,Rest,Spring Boot,Spring Webflux,Spring Web,我试图使用WebClient通过REST调用另一项服务,但我始终收到错误: org.springframework.web.reactive.function.UnsupportedMediaTypeException:不支持内容类型“application/json” 所有分配都有相同版本的依赖项,通过Postman调用资源可以很好地工作。问题是当第一个应用程序作为代理(客户端)尝试调用第二个应用程序(服务)时 我的服务器资源: @RequestMapping(value = "/proper

我试图使用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);
}
我的客户资源:

@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);
}
我是否缺少一些依赖项来启用JSON contentType?这个例子很简单,但对我来说也很有问题

表格模型:

class PropertyForm {

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

来源:

我终于找到了答案。问题其实出在发送表单上。表单的作用域是包,与setter/getter相同。在我将PropertyForm提取到API模块并将所有内容公开之后,它就开始工作了

因此,解决方案是用以下内容取代形式:

public class PropertyForm {

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

感谢您的帮助和时间。

有趣的是,我已经重新创建了您的确切环境,它适合我。你也可以提供PropertyForm类吗?这对我来说是最糟糕的情况。因为它从一开始就应该在理论上起作用。表单是只有getter的简单Pojo。我一下班就会链接源代码。你需要在你的类路径上有某种Object->Json编码器,例如Jackson2JSONeCoder,它可以从Object到JSONJson serilizer进行编码,因为我有完美的get映射。