Como posso resolver essa execption ao tentar passar um email como parâmetro na url.
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Como posso resolver essa execption ao tentar passar um email como parâmetro na url.
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation.
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.
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!
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!