Java 没有类型参数的继承控制器方法不能与RequestMapping一起映射
我为我的最新web app项目创建了一个基本Spring控制器,我从中继承了所有基本CRUD控制器,称为CrudController:Java 没有类型参数的继承控制器方法不能与RequestMapping一起映射,java,spring,spring-mvc,spring-annotations,Java,Spring,Spring Mvc,Spring Annotations,我为我的最新web app项目创建了一个基本Spring控制器,我从中继承了所有基本CRUD控制器,称为CrudController: class CrudController<T, K extends Serializable> 经过大量实验,我发现如果我向getAll方法添加一个参数,该方法是类参数类型之一,那么该方法将被映射。查看以下非常类似的代码: @RequestMapping(method = RequestMethod.GET) public HttpEntity&l
class CrudController<T, K extends Serializable>
经过大量实验,我发现如果我向getAll方法添加一个参数,该方法是类参数类型之一,那么该方法将被映射。查看以下非常类似的代码:
@RequestMapping(method = RequestMethod.GET)
public HttpEntity<?> getAll(K dontuse) {
Iterable<T> result = controllerRepository.findAll();
return new ResponseEntity<Object>(result, HttpStatus.OK);
}
@RequestMapping(method=RequestMethod.GET)
公共HttpEntity getAll(K dontuse){
Iterable result=controllerRepository.findAll();
返回新的响应状态(结果,HttpStatus.OK);
}
有了这个小小的代码更改,/find
调用就可以正常工作了。我可以把我的虚拟参数放在那里,一切都可以正常工作,但它有气味
有什么想法吗?可在此处找到复制该问题的简化项目:
Java中当前有一个bug,请参阅bug报告,其中为声明为包私有的超类中的每个继承方法返回一个桥接
方法。基于javadoc,它不应该这样做
这混淆了SpringMVC对@Controller
注释类和处理程序方法的检查。在这个答案中详细讨论并不是很有用,但是您可以查看处理它的代码
最简单的解决方案是将crudepository
类声明为public
public class CrudController<T, K extends Serializable>
公共类CrudController
这是一个很棒的疑难解答,+1
@RequestMapping(method = RequestMethod.GET)
public HttpEntity<?> getAll(K dontuse) {
Iterable<T> result = controllerRepository.findAll();
return new ResponseEntity<Object>(result, HttpStatus.OK);
}
public class CrudController<T, K extends Serializable>