【发布时间】:2017-05-03 13:57:36
【问题描述】:
鉴于Bean 是一个抽象类并且Venue 类扩展Bean。 ControllerInterface 是一个接口,VenueController 实现了这个接口。
界面
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 data 更改为 Venue data 但它不起作用,因为这会更改方法签名并且不会被覆盖。
有什么想法吗?
【问题讨论】:
标签: java spring inheritance spring-boot