【问题标题】:Spring boot Rest Controller POST multiple data types mapped to one request urlSpring boot Rest Controller POST 多种数据类型映射到一个请求 url
【发布时间】:2015-10-04 21:19:17
【问题描述】:

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

我尝试过用两种数据类型声明两种方法,但 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");
}

【问题讨论】:

    标签: java spring rest jackson spring-boot


    【解决方案1】:

    您可以创建一个单一的方法,例如接收一个字符串。然后您需要分析一个字符串,将其编组为一个对象,并调用一个私有方法,具体取决于结果类型。 但我的意思是它的错误方法。更好地为不同的参数定义不同的端点。

    【讨论】:

    • 是的,我正在努力解决这个问题。但作为最后的手段,我必须走那条路。
    • 我认为,没有一个好的解决方案。资源由其路径唯一定义,而不是由其参数定义。然后,在您的情况下,正确的决定是为每种参数类型使用不同的 url 路径
    【解决方案2】:

    这样做时我通常会使用复数端点。

    如果我添加一个客户,端点将是 /customer,如果它是一个列表,我会添加 /customers。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2019-11-13
      • 2019-11-25
      • 2023-03-09
      • 2017-12-24
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多