鉴于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
,但它不起作用,因为这会更改方法签名并且不会被覆盖。
有什么想法吗?
答案 0 :(得分:1)
只是一些建议要小心你的注释方法被继承,我已经多次发现我的注释没有完成,这些错误变得非常难以追踪。
您需要使用泛型ControllerInterface<SOME extends Bean>
,然后使用SOME
代替Bean
。
此致