Spring WebClient put Mapping: тип контента 'application / json' не поддерживается - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь использовать 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 голосов
/ 17 сентября 2018

Я наконец нашел ответ.Проблема была в форме отправки на самом деле.Область применения формы была такой же, как и у сеттеров / геттеров.После того, как я извлек модуль PropertyForm в API и сделал все общедоступным, он заявил, что работает.

Таким образом, решение состояло в том, чтобы заменить форму на:

public class PropertyForm {

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

Спасибо за вашу помощь ивремя.

...