entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

no suitable HttpMessageConverter found for response type

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!

1 Respuesta

1voto

fernando_vilas Puntos220

Bueno ya he descubierto el problema. La respuesta contiene un tipo "text/html" por que lo que le está llegando es una página de error debido a una mala configuración de la seguridad. Doy el tema por cerrado pues.

0voto

Peter comentado

Por favor marca tu respuesta como correcta si es la solución :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta