我需要一个弹簧支架控制器来插入数据。这就是我已经得到的:
@RestController
@Transactional
public abstract class AbstractRESTController<E extends Identifiable<P>, P extends Serializable> {
@RequestMapping(method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody final E entity) {
service.create(entity);
}
}
所以我可以在http://mycontext/插入一个实体 我现在需要的是一种接受相同路径的实体列表的方法。基本上这个:
@RequestMapping(method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public void createAll(@RequestBody final List<E> entities) {
for (E entity : entities) {
service.create(entity);
}
}
那么我怎样才能让Spring知道我发送数组而不是单个实体然后使用其他功能呢? 我的错误:
Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'sfusersRESTController' bean method
public void AbstractRESTController.createAll(java.util.List<E>)
to {[/sfusers],methods=[POST],params=[],headers=[],consumes=[application/json],produces=[],custom=[]}: There is already 'sfusersRESTController' bean method
public void AbstractRESTController.create(E) mapped.
答案 0 :(得分:1)
如果要将多个请求映射到给定路径,则必须使用不同的HTTP方法;例如。 POST,PUT。
在您的情况下,我会使URL不同;即one / mycontext / as-entity和/ mycontext / as-list。
或者您必须具有相同的URL - 它必须能够处理各种请求主体。所以你可以有一个RequestMapping(),它需要一个Object - 然后处理该对象 - 作为实体或列表。
就个人而言,我仍然更喜欢不同的RequestMapping路径。
答案 1 :(得分:1)
定义不同的请求映射路径,以便它可以使用
进行相应的回调@RequestMapping(value = "")
现在您的休息控制器将如下所示:
@RestController
@Transactional
public abstract class AbstractRESTController<E extends Identifiable<P>, P extends Serializable> {
@RequestMapping(value = "create", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody final E entity) {
service.create(entity);
}
@RequestMapping(value = "createAll", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public void createAll(@RequestBody final List<E> entities) {
for (E entity : entities) {
service.create(entity);
}
}
}