RestClientException: нет HttpMessageConverter - PullRequest
0 голосов
/ 11 марта 2020

Похоже, что это распространенная ошибка, но также возможны различные решения.

Я попробовал несколько из них без какой-либо удачи. Была добавлена ​​зависимость Джексона, использовался объект MappingJackson2HttpMessageConverter. Проверено, установлен ли MediaType.APPLICATION_ JSON.

Преобразование POJO в строку json в первую очередь и изменение контроллера для приема строки вместо указанного c объекта, с которым он работает.

Ниже приведен фрагмент кода, показывающий контроллер, который принимает POJO и генерирует исключение. Были небольшие изменения и, надеюсь, нет синтаксических ошибок.

Контроллер

@RestController
@RequestMapping(path = "/main")
public class TestController 
{

    @GetMapping(path="/firstTest", consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = "application/json")
    public String login(@RequestBody MyObject1 obj1) 
    {
         System.out.println("============Inside routine=============");
         return "Returning....";
    }
}

Cosumer

private static void runTest() 
{
    MyObject1 obj1 = new MyObject(101, "Test");

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("key", "value");
    HttpEntity<MyObject1 > packetEntity = new HttpEntity<>(obj1,headers);

    ResponseEntity<String>result = restTemplate.exchange("http://localhost:8080/main/FirstTest", HttpMethod.GET, packetEntity, String.class);
    System.out.println(result);
}

Исключение

Exception in thread "main" org.springframework.web.client.RestClientException: No HttpMessageConverter for com.demo.MyObject1 and content type "application/json"
    at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:964)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:740)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:586)
    at com.demo.clientSide.SimplestGetExample.attemptLogin(Test.java:106)
    at com.demo.clientSide.SimplestGetExample.main(Test.java:56)

POJO

 import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;

public class MyObject1 
{
    @Setter @Getter int x;
    @Setter @Getter String y;

    public MyObject1() {}


public MyObject1(int x, String y)
    {
        this.x  = x;
        this.y  = y;
    }
}

Есть ли что-то очевидное, что было упущено в этом примере?

Так как не совсем уверен, что @RequestBody требуется в Контроллер.

Могу ли я передать POJO и заставить Spring выполнить преобразование в json за кадром, или ожидается, что я явно выполню преобразование в json?

Обновленная информация

Если следующая строка закомментирована, получено немного другое исключение.

    headers.setContentType(MediaType.APPLICATION_JSON);

Один упомянутый поток, так как это процедура GET, ContentType не должен быть установлен. Исключение в основном такое же, но без последней части строки ".... и тип содержимого" application / json "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...