我可以使用与不同请求体相同的请求映射创建多个HTTP POST方法

时间:2017-02-02 06:03:04

标签: java spring-boot http-post

我可以创建多个HTTP POST方法,并使用不同的请求主体进行相同的请求映射

@RequestMapping("api/v1/")
@RequestMapping(value = "test" ,method = RequestMethod.POST)
public RObjet create(@RequestBody RBody rbody)
{  
 // do some process...  
} 

@RequestMapping("api/v1/")
@RequestMapping(value = "test" ,method = RequestMethod.POST)
public RObjet2 create2(@RequestBody RBody2 rbody)
{  

  // do something.  

} 

这可能吗?我们如何在春季靴子中处理这个问题。

2 个答案:

答案 0 :(得分:0)

是的,您可以对具有不同请求主体的相同端点URI使用POST Http方法,并且可以获得不同的响应。实现此目的的一种方法是使用端点URI +标头映射请求

例如

@RestController
@RequestMapping("/api/bills")
public class BillingController {

    @RequestMapping(method = RequestMethod.POST, headers = "action=add-bill")
    public BillId addBill(@Valid @RequestBody BillingData data) {
        //Some code
    }

    @RequestMapping(method = RequestMethod.POST, headers = "action=delete-bill-by-id")
    @ResponseStatus(code = HttpStatus.NO_CONTENT)
    public void removeBill(@Valid @RequestBody BillId identifier) {
        //Some code here to remove bill
    }

}

在这种情况下,BillingController中的两个类方法都映射到相同的HTTP方法(POST)和URI(/ api / bills)。当您将发布请求指向/ api / bills

后,标头操作将驱动BillingController中的类方法被调用

如何打BillingController.addBill?

BillingController.addBill

注意:我知道良好的REST API设计指示如果我要删除记录,则应该使用DELETE方法,但是创建此示例只是作为参考,以显示如何使用相同的URI / Method处理2个不同的端点。

答案 1 :(得分:-1)

你必须选择这个。

  • 可以使用消耗字段。您可以使用不同的消费类型。

    • 如果您有网址,则可以使用params字段。

      @RequestMapping(value =" / path",params =" id") public String test1(@RequestBody RBody body){}

      @RequestMapping(value =" / path",params =" name") public String test2(@RequestBody RBody body){}