java - Inherited controller method without type parameter does not get mapped with RequestMapping -
i created base spring controller latest web app project inherit basic crud controllers, called crudcontroller:
class crudcontroller<t, k extends serializable> t entity type, , k key used type (pretty parameters needed spring's crudrepository). create rest controller extending it, so:
@restcontroller @requestmapping(path = "/hats") public class hatcontroller extends crudcontroller<hat, integer> { } everything works great, except method gets list of items, /hats. method, 405 method not allowed. when @ logging done during startup, can see requestmappinghandlermapping did not map {[/hats],methods=[get]} did map other 4 methods in controller. here code method isn't being mapped:
@requestmapping(method = requestmethod.get) public httpentity<?> getall() { iterable<t> result = controllerrepository.findall(); return new responseentity<object>(result, httpstatus.ok); } after experimentation, have discovered if add parameter getall method 1 of class parameter types, method mapped. check similar code out:
@requestmapping(method = requestmethod.get) public httpentity<?> getall(k dontuse) { iterable<t> result = controllerrepository.findall(); return new responseentity<object>(result, httpstatus.ok); } with small code change, /find call works fine. can keep dummy parameter in there , work, smells.
any ideas? simplified project replicates issue can found here:
there's bug in java, see bug reports here , here, class#getdeclaredmethods() returns bridge method each inherited method superclass declared package-private. based on javadoc, shouldn't that.
this confuses spring mvc's inspection of @controller annotated classes , handler methods. going detail in answer won't useful, can @ code handles here.
the simplest solution declare crudrepository class public.
public class crudcontroller<t, k extends serializable>
Comments
Post a Comment