具有相同RestEndPoint的两种不同方法:如何解决?

时间:2019-12-09 13:09:09

标签: java spring http spring-restcontroller

我想知道是否根据每个方法RestEndPoint调用被映射到控制器中两个不同方法的相同PRODUCES

以下描述了我的要求?

@Controller
ContollerClass {

   @GetMapping(value = "/v1/v2/{userID}", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<byte[]> getUser( {

      // Rest of code

   }

    @GetMapping(value = "/v1/v2/{userID}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    public ResponseEntity<byte[]> getBinUser( {

      // Rest of code

   }
}

如图所示,它有两种不同的GET请求方法和完全相同的Rest end point。唯一的区别是它们返回的return type

现在,当任何http客户端调用此其余端点(可以是browsercurlpostman等)时,如何区分将实际调用哪个端点?与produces有什么关系吗?如果是这样,客户端必须调用什么?是否需要提供accept HTTP标头?

1 个答案:

答案 0 :(得分:0)

您可以根据某些参数区分它们,例如您可以尝试类似

@GetMapping(value = "/v1/v2/{userID}", produces = MediaType.APPLICATION_JSON_VALUE, params = "paramForGetUser")
public ResponseEntity<byte[]> getUser(@RequestParam String paramForGetUser){

  // Rest of code

}

@GetMapping(value = "/v1/v2/{userID}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE, params = "paramForGetBinUser")
public ResponseEntity<byte[]> getBinUser(@RequestParam String paramForGetBinUser){

  // Rest of code

}