Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Exception: Could not find acceptable representation

Como posso resolver essa execption ao tentar passar um email como parâmetro na url.

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation.
7 respostas

Fala Clerman, tudo bem ?

Cara essa exception em geral é lançada quando a ação desejada não consegue produzir uma resposta aceita pelo cliente. Provavelmente pelo media type ser diferente (seu controller devolve application/json e o cliente quer text/html ou vice-versa). Como diz a documentação da própria exception.

http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/HttpMediaTypeNotAcceptableException.html

Mas não dá pra ter muita noção de como resolver só vendo isso. Explica melhor o contexto do seu problema, pra podermos entender o porque ta dando errado.

Abraço!

solução!

Olá Rafael. Pesquisando aqui sobre o erro, consegui corrigir colocando no recebimento da url na variável

@RequestMapping(value="/url/{variavel:.*}" . adicionei o ":.*"

essa config ajudou no erro ao receber o parâmetro e adicionei na classe a seguinte config:

// http
        HttpMessageConverter converter1 = new StringHttpMessageConverter();
        converters.add(converter1);

        // string
        FormHttpMessageConverter converter2 = new FormHttpMessageConverter();
        converters.add(converter2);

        //json
        MappingJackson2HttpMessageConverter converter3 = new MappingJackson2HttpMessageConverter();
        converters.add(converter3);

SpringMvcConfig

Olá Rafael. Minha aplicação voltou a a apresentar o mesmo erro. Meu método que retorno um json em formato de String (até aqui não tinha mais o erro), agora alterei para retornar um objeto e voltou o erro. Pode dizer do que se trata?

Coloca a Stack Trace aqui pra gente ver. Posta também seu código do controller e sua view pra gente tentar entender melhor sua funcionalidade e o problema que está enfrentando.

Rafael fui olhar a documentação e encontrei o método:

    @Override
      public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(false).
                favorParameter(true).
                parameterName("mediaType").
                ignoreAcceptHeader(true).
                useJaf(false).
                defaultContentType(MediaType.APPLICATION_JSON).
                mediaType("xml", MediaType.APPLICATION_XML).
                mediaType("json", MediaType.APPLICATION_JSON);
     }

e o problema foi resolvi aparentemente!

Olá Rafael. Com essa Configuração meu problema foi resolvido mas os outros json não estão carregando mais, tem alguma sugestão ou preciso abrir outro tópico? A saída do conscole:

13:47:32.689 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.DispatcherServlet - Handler execution resulted in exception - forwarding to resolved error view: ModelAndView: reference to view with name 'errors/error'; model is {mensagem=Ocorreu um erro durante a operação, tente novamente!, url=http://localhost:8080/financeiro/email/enviarSenha/klermann@hotmail.com, excecao=org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation}
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:191)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:153)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:165)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:207)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Fala Clerman,

É difícil entender qual a causa sem ver o código, e os detalhes das requisições que está fazendo. Mas de qualquer forma pode tentar configurar o content negotiation do Spring pra resolver esse suporte a multiplos mediatypes. Remova as configurações anteriores e tente da seguinte maneira

Exemplo - classe de configuração

...

//exemplo de view resolver que te ajuda a devolver jsp, se sua aplicação usar jsp como view
@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
}

// configuração do ContentNegotiationViewResolver
@Bean
public ContentNegotiatingViewResolver contentNegotiatingViewResolver(ContentNegotiationManager negotiationManager) {

    List<ViewResolver> viewResolvers = new ArrayList<ViewResolver>();
    viewResolvers.add(internalResourceViewResolver());
    viewResolvers.add(new JsonViewResolver());
    // outros view resolvers pra outros media types

    ContentNegotiatingViewResolver viewResolver = new ContentNegotiatingViewResolver();
    viewResolver.setViewResolvers(viewResolvers);
    viewResolver.setContentNegotiationManager(negotiationManager);
    return viewResolver;

}

Classe que mapeia a Jackson Json pra serialização quando a saída for pos este media type

public class JsonViewResolver implements ViewResolver{

    @Override
    public View resolveViewName(String viewName, Locale locale) throws Exception {
        return new MappingJackson2JsonView();
    }
}

PS: Essa configuração é apresentada no curso

Assim o Spring Mvc quando for devolver a resposta pra sua requisição vai verificar o header Accept que vem do cliente. Se este estiver com conteúdo application/json ele vai usar a Jackson pra serializar e devolver no corpo da resposta o conteúdo json.

Atente-se para a presença das seguintes libs no seu classpath: jackson_core, jackson_databind e jackson_annotations.

Espero ter ajudado. Abraço!