Buenas, estoy un poco atascado aquí, llevo varios días dandole vuelta y leyendo soluciones pero no alcanzo a comprender que es lo que está fallando. Tengo una aplicación restFull realizada con spring mvc 3.2.4, la cual al hacer una petición GET a través del controlador me devuelve el error "no suitable HttpMessageConverter found for response type [com.src.model.UserDTO] and content type [text/html;charset=UTF-8]"
Paso a detallar las clases que intervienen:
Controlador del cliente:
@Controller
public class HomeController {
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String getHome(HttpServletRequest request, Model model) {
Principal userPrincipal = request.getUserPrincipal();
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
HttpEntity<UserDTO> entity = new HttpEntity<UserDTO>(headers);
RestTemplate restTemplate1 = new RestTemplate();
ResponseEntity<UserDTO> result = restTemplate1.exchange("http://localhost:8080/rideon/users/{id}",
HttpMethod.GET, entity, UserDTO.class, userPrincipal.getName());
model.addAttribute("user", result.getBody());
return "home";
}
Controlador del servidor:
@Controller
public class UsersController {
private static final Logger LOGGER = LoggerFactory.getLogger(UsersController.class);
@Autowired
private UserService userService;
@RequestMapping(value = "users/{id}", method = RequestMethod.GET, headers = "Accept=application/xml")
@ResponseBody
public UserDTO getUser(@PathVariable("id") String id) {
return userService.getUserById(id);
}
Clase User:
@XmlRootElement
@Entity(name = "users")
public class UserDTO implements Serializable {
@Id
private String email;
private String password;
private String name;
//Getters y setters
Dependencias
<!--REST-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.9</version>
<scope>runtime</scope>
</dependency>
Error:
SEVERE: El Servlet.service() para el servlet [dispatcher] en el contexto con ruta [/rideon] lanzó la excepción [Request processing failed; nested exception is org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [com.src.model.UserDTO] and content type [text/html;charset=UTF-8]] con causa raíz
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [com.src.model.UserDTO] and content type [text/html;charset=UTF-8]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtra ctor.java:84)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:627)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:454)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409)
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:229)
at com.src.web.controller.HomeController.getHome(HomeController.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
La petición nunca llega al servidor, por lo que descarto que sea un problema de incompatibilidad de tipo de dato en la respuesta del servidor, de echo realizando la petición desde el navegador devuelve correctamente el objecto en formato xml. Entiendo que hay algún error en la configuración del restTemplate, pero soy incapaz de encontarla. Espero que me podaís aclarar algo de esto, si falta alguna información por favor perdirmela y actualizo, gracias!