Java ServletException:仅针对一个服务的处理程序没有适配器

Java ServletException:仅针对一个服务的处理程序没有适配器,java,spring,rest,spring-mvc,controller,Java,Spring,Rest,Spring Mvc,Controller,我只在一次服务中得到这个例外。我有两个服务在控制器和其他工作完美 @Controller @RequestMapping("/document") public class DocumentController { @Autowired private PdfService pdfService; @Autowired private MailService mailService; @Autowired private TransaccionService transaccionServ

我只在一次服务中得到这个例外。我有两个服务在控制器和其他工作完美

@Controller
@RequestMapping("/document")
public class DocumentController {

@Autowired
private PdfService pdfService;

@Autowired
private MailService mailService;

@Autowired
private TransaccionService transaccionService;

@Autowired
private UsuarioService usuarioService;

@RequestMapping(value = "/export", method = RequestMethod.GET)
public void exportAutorizacion(HttpServletRequest request){
    TicketAutorizacionDto ticket = (TicketAutorizacionDto) request.getSession().getAttribute("ticketAutorizacion");
    this.pdfService.createPdf(ticket);

}

@RequestMapping(value = "/email/{numeroAutorizacion}", method = RequestMethod.PUT)
public Boolean enviarMail(@PathVariable("numeroAutorizacion") Integer numeroAutorizacion,@ModelAttribute EmailsForm mails){

    if(mails.getEmails().isEmpty() || numeroAutorizacion == null){
        return false;
    }

    UsuarioForm usuarioForm = null;
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    try {
        usuarioForm = this.usuarioService.getUsuarioByNombreUsuario(auth.getName());
        TicketAutorizacionDto ticket = this.transaccionService.getTicketAutorizacion(numeroAutorizacion, usuarioForm.getIdBeneficiario());
        return this.mailService.enviarOrdenMedica(ticket, mails.getEmails().toArray(new String[mails.getEmails().size()]));
    } catch (NoExisteBeneficiarioException e) {
        e.printStackTrace();
    }

    return false;
    }
}
以及xml:

<mvc:annotation-driven />
<tx:annotation-driven />
<!-- <context:property-placeholder -->
<!-- properties-ref="deployProperties" /> -->

<!-- Activates various annotations to be detected in bean classes -->
<!-- <context:annotation-config /> -->

<!-- Scans the classpath for annotated components that will be auto-registered 
    as Spring beans. For example @Controller and @Service. Make sure to set the 
    correct base-package -->
<context:component-scan base-package="ar.com.conexia.salud.*" />

<jpa:repositories base-package="ar.com.conexia.salud.repository" />
<!-- Configures the annotation-driven Spring MVC Controller programming 
    model. Note that, with Spring 3.0, this tag works in Servlet MVC only! -->
<mvc:annotation-driven />
<!-- Imports datasource configuration -->
<!-- <import resource="spring-data.xml" /> -->

<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- Imports logging configuration -->
<!-- <import resource="trace-context.xml" /> -->


<!-- <bean id="deployProperties" -->
<!-- class="org.springframework.beans.factory.config.PropertiesFactoryBean" -->
<!-- p:location="/WEB-INF/spring.properties" /> -->

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>messages</value>
        </list>
    </property>
</bean>
<bean id="localeChangeInterceptor" class="ar.com.conexia.salud.interceptors.LanguageInterceptor">
    <property name="paramName" value="lang" />
</bean>
<bean id="userDetailsServiceImpl" class="ar.com.conexia.salud.security.UserServiceImpl">

</bean>
<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="es" />
</bean>
<mvc:interceptors>
    <bean class="ar.com.conexia.salud.interceptors.LanguageInterceptor">
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>


<bean id="transactionTrasmitter"
    class="ar.com.conexia.salud.transmitter.COMEITransactionTransmitter">
    <property name="serverPort" value="2012" />
    <property name="timeout" value="300000" />
    <property name="password" value="conexia" />
    <property name="serverIP" value="192.168.0.97" />
    <!-- <property name="serverIP" value="localhost"/> -->
    <property name="msjKey" value="C:\\mySrvKeystore" />
    <!-- <property name="msjKey" value="/usr/local/mySrvKeystore" /> -->
</bean>

<bean id="basePath" class="java.lang.String">
    <constructor-arg
        value="#{systemProperties['catalina.home']}/webapps/COMEI_Beneficiario" />
</bean>

<bean id="pdfGenerator" class="ar.com.conexia.generator.PdfGenerator">
    <constructor-arg value="/WEB-INF/classes/reports/" />
    <constructor-arg value="C://reports//" />
</bean>

<bean id="emailConfiguration" class="ar.com.conexia.salud.dto.EmailConfigurationDto">
    <property name="port" value="25" />
    <property name="auth" value="true" />
    <property name="starttls" value="true" />
    <property name="host" value="192.168.0.10" />
    <property name="user" value="smtpcomei@conexia.com.ar" />
    <property name="pass" value="" />
</bean>

为什么要尝试从控制器方法返回布尔值?此方法是否服务于rest请求?在这种情况下,它需要用@ResponseBody注释,或者如果您使用的是Spring4.x,请将@Controller更改为@RestController。如果这不是Rest服务,我认为您不能返回布尔值。必须返回字符串或ModelAndView对象。

为什么要尝试从控制器方法返回布尔值?此方法是否服务于rest请求?在这种情况下,它需要用@ResponseBody注释,或者如果您使用的是Spring4.x,请将@Controller更改为@RestController。如果这不是Rest服务,我认为您不能返回布尔值。您必须返回字符串或ModelAndView对象。

您是否也可以添加异常?@ADi exception added,谢谢!看看这个问题:@ADi我已经试过了,但是运气不好。你为什么试图从你的控制器方法返回布尔值?此方法是否服务于rest请求?在这种情况下,需要使用
@ResponseBody
对其进行注释,或者如果您使用的是Spring 4.x,请将
@Controller
更改为
@RestController
。如果这不是Rest服务,我认为您不能返回布尔值。您必须返回字符串或ModelAndView对象。是否也可以添加异常?@ADi已添加异常,谢谢!看看这个问题:@ADi我已经试过了,但是运气不好。你为什么试图从你的控制器方法返回布尔值?此方法是否服务于rest请求?在这种情况下,需要使用
@ResponseBody
对其进行注释,或者如果您使用的是Spring 4.x,请将
@Controller
更改为
@RestController
。如果这不是Rest服务,我认为您不能返回布尔值。必须返回字符串或ModelAndView对象。
SEVERE: El Servlet.service() para el servlet [dispatcher] en el contexto con ruta [/COMEI_Beneficiario] lanzó la excepción [No adapter for handler [public java.lang.Boolean ar.com.conexia.salud.controller.DocumentController.enviarMail(java.lang.Integer)]: Does your handler implement a supported interface like Controller?] con causa raíz
javax.servlet.ServletException: No adapter for handler [public java.lang.Boolean ar.com.conexia.salud.controller.DocumentController.enviarMail(java.lang.Integer)]: Does your handler implement a supported interface like Controller?
    at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1077)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:870)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:722)