RequestMapping:如何访问用于休息端点的“方法”值

Vis*_*rez 5 java rest spring request-mapping

我有一个 Spring Boot REST 控制器端点,它接受 GET 和 POST 请求:

@RequestMapping(
        value="/users",
        method= {RequestMethod.GET, RequestMethod.POST},
        headers= {"content-type=application/json"}
        )
public ResponseEntity<List<User>> getUsers() {
    if(/*Method is GET*/) {
        System.out.println("This is a GET request response.");
    } else if( /*Method is POST*/) {
        System.out.println("This is a POST request response.");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果此端点被 GET 请求命中,我希望控制器在适当的 if 语句中执行某些操作。然而,如果端点被 POST 请求击中,我希望控制器采取另一种行动。

如何从休息控制器中提取这一信息?我宁愿不必将此共享端点拆分为两种不同的方法。这看起来很简单,我只是找不到任何相关文档。

Mar*_*orn 11

正确的方法是映射两个单独的 GET 和 POST 方法,但如果您打算采用这种方法,则可以通过访问 HttpServletRequest 来获取请求的 HTTP 谓词,如下所示:

@RequestMapping(
    value="/users",
    method= {RequestMethod.GET, RequestMethod.POST},
    headers= {"content-type=application/json"}
    )
public ResponseEntity<List<User>> getUsers(final HttpServletRequest request) {
    if(request.getMethod().equals("GET")) {
        System.out.println("This is a GET request response.");
    } else if(request.getMethod().equals("POST")) {
        System.out.println("This is a POST request response.");
    }
}
Run Code Online (Sandbox Code Playgroud)

您无需更改调用代码,因为 HttpServletRequest 会自动传递