Skip to content

@Controller marked class cannot implements Comparator [SPR-5935] #10604

@spring-projects-issues

Description

@spring-projects-issues

Robert Kristofic opened SPR-5935 and commented

If you have @Controller marked class which implements Comparator.

Exception:

javax.servlet.ServletException: No adapter for handler
[plaut.jfos.module.dashboard.web.controller.PartnerDetailController@2f1f479a]:
Does your handler implement a supported interface like Controller?
org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter
(DispatcherServlet.java:1091)
org.springframework.web.servlet.DispatcherServlet.doDispatch
(DispatcherServlet.java:874)
org.springframework.web.servlet.DispatcherServlet.doService
(DispatcherServlet.java:809)
org.springframework.web.servlet.FrameworkServlet.processRequest
(FrameworkServlet.java:571)
org.springframework.web.servlet.FrameworkServlet.doPost
(FrameworkServlet.java:511)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal
(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter
(OncePerRequestFilter.java:76)
org.springframework.security.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
org.springframework.security.ui.logout.LogoutFilter.doFilterHttp
(LogoutFilter.java:89)
org.springframework.security.ui.SpringSecurityFilter.doFilter
(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp
(AbstractProcessingFilter.java:271)
org.springframework.security.ui.SpringSecurityFilter.doFilter
(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
org.springframework.security.ui.x509.X509ProcessingFilter.doFilter
(X509ProcessingFilter.java:137)
org.springframework.security.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
plaut.jfos.framework.server.JfosContextOUSetterFilter.doFilter
(JfosContextOUSetterFilter.java:59)
org.springframework.security.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp
(HttpSessionContextIntegrationFilter.java:235)
org.springframework.security.ui.SpringSecurityFilter.doFilter
(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
org.springframework.security.util.FilterChainProxy.doFilter
(FilterChainProxy.java:174)
org.springframework.security.util.FilterToBeanProxy.doFilter
(FilterToBeanProxy.java:99)

Controller code (not complete):

@Controller
public class PartnerDetailController extends AbstractDashboardController implements Comparator<OrganizationUnit> {

//....

@RequestMapping(value = "/dashboard/partnerdetail.do")
public String process(@ModelAttribute("formData") PartnerDetailForm formData, HttpSession session) {

    formData.setOrganizationUnits(Collections.sort(codeListService.getOrganizationUnits(), this));

    return "/dashboard/partnerdetail.jsp";
}

// ....

@Override
public int compare(OrganizationUnit o1, OrganizationUnit o2) {
    if(o1 == null || o1.getLabel() == null) {
        return -1;
    }
    else if(o2 == null || o2.getLabel() == null) {
        return 1;
    }
    else return o1.getLabel().compareTo(o2.getLabel());
}

}

If you remove Comparator interface and compare, everything is OK.


Affects: 2.5.5

Issue Links:

Metadata

Metadata

Assignees

Labels

status: declinedA suggestion or change that we don't feel we should currently apply

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions