鉴于 Bean
是一个抽象类,并且 Venue
类扩展了 Bean
。 ControllerInterface是一个接口(interface),VenueController实现了这个接口(interface)。
界面
public interface ControllerInterface {
@RequestMapping(value = "/", method = RequestMethod.GET)
public List getAll();
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Bean getOneById(@PathVariable(value = "id", required = true) String id);
@RequestMapping(value = "/{id}", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public @ResponseBody Bean updateOne(@PathVariable("id") String id,Bean beanData);
@RequestMapping(value = "/", method = RequestMethod.POST)
public String addOne();
}
普通类
public class VenueController implements ControllerInterface{
@Autowired
VenueDAO venueDAO;
@Override
public List<Venue> getAll() {
return venueDAO.findAll();
}
@Override
public Bean getOneById(@PathVariable(value = "id", required = true) String id) {
return venueDAO.findBy(id);
}
@Override
public String addOne() {
// TODO : add a new venue and return its id
return null;
}
@Override
@RequestMapping(value = "/{id}", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public @ResponseBody Bean updateOne(@PathVariable("id") String id, Bean data) {
Venue venueData = (Venue) data;
Venue venue = venueDAO.findBy(id);
Util.copyNonNullProperties(venueData, venue);
venueDAO.update(venue);
return null;
}
}
显然这段代码会导致 public @ResponseBody Bean updateOne(@PathVariable("id") String id, Bean data) 中出现 InstantiationException
因为Bean是一个抽象类,无法初始化它。
所以我的问题是如何使这成为可能?
我想过将 Bean 数据
更改为 Venue 数据
,但它不起作用,因为这会更改方法签名并且不会被覆盖。
有什么想法吗?
最佳答案
只是一些建议,请小心您的带注释的方法被继承,我多次发现我的注释没有执行,并且这些错误变得非常难以追踪。
您将需要使用泛型ControllerInterface<SOME extends Bean>
,然后使用SOME
而不是Bean
.
问候
关于java - 抽象类作为接口(interface)中的属性,将被子类覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762185/