Похоже, что это распространенная ошибка, но также возможны различные решения.
Я попробовал несколько из них без какой-либо удачи. Была добавлена зависимость Джексона, использовался объект 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 "