Como posso resolver essa execption ao tentar passar um email como parâmetro na url.
org.springframework.web.HttpMediaTypeNotAcceptableException: 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.
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!