Spring引导Rest Controller POST多个数据类型映射到一个请求URL

时间:2015-07-15 17:25:46

标签: java spring rest jackson spring-boot

我试图设置一个可以接受单个对象或相同类型对象列表的端点。

我尝试过用两种数据类型声明两种方法,但是Spring并不喜欢(无法启动服务器)

@RequestMapping(
        value = "",
        method = RequestMethod.POST ,
        produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> single(@RequestBody Something something){
    return ResponseEntity.ok("ok");
}

@RequestMapping(
        value = "",
        method = RequestMethod.POST ,
        produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> multiple(@RequestBody List<Something> somethingList){
    return ResponseEntity.ok("ok");
}

我最接近的是接受Something []并宣布一种方法。

@RequestMapping(
        value = "",
        method = RequestMethod.POST ,
        produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> somethingArray(@RequestBody Something... something){
    return ResponseEntity.ok("ok");
}

问题:有没有办法在不必仅接受对象的情况下手动执行反序列化?

编辑:我也尝试了多个@RequestBody,即

@RequestMapping(
        value = "",
        method = RequestMethod.POST ,
        produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> somethingArray(@RequestBody(required = false) Something something, @RequestBody(required = false) Something[] somethingArray){
    return ResponseEntity.ok("ok");
}

2 个答案:

答案 0 :(得分:0)

您可以创建一个接收String的方法。然后,您需要分析一个String,将其封送到一个Object,并根据结果类型调用一个私有方法。 但我的意思是错误的做法。更好地为不同的参数定义不同的端点。

答案 1 :(得分:0)

在执行此操作时,我通常会创建一个复数端点。

如果我要添加客户,则端点将是/ customer,如果它是List I do / customers。

据我所知,您不能通过参数类型重载请求方法。