Java 使用@RequestBody获取的RESTAPI

Java 使用@RequestBody获取的RESTAPI,java,rest,spring-mvc,Java,Rest,Spring Mvc,在为我的资源仪表板创建REST端点时,我正在尝试遵循最佳实践。因此,我计划在我的spring mvc控制器中创建POST for creation、PUT for update和GET for fetching仪表板 但是,我还有一个validateAPI端点,它不会保存或更新数据库中的任何内容,因此我计划对validate端点使用GETHTTP方法。但是有很多参数我需要传递给这个端点,所以我希望这是一个@RequestBody,而不仅仅是普通的请求参数,因为GET有一个我可以超过的限制 我是否

在为我的资源
仪表板创建REST端点时,我正在尝试遵循最佳实践。因此,我计划在我的spring mvc控制器中创建POST for creation、PUT for update和GET for fetching
仪表板

但是,我还有一个
validate
API端点,它不会保存或更新数据库中的任何内容,因此我计划对
validate
端点使用
GET
HTTP方法。但是有很多参数我需要传递给这个端点,所以我希望这是一个
@RequestBody
,而不仅仅是普通的请求参数,因为
GET
有一个我可以超过的限制

我是否应该使用
POST
而不是
GET
,即使我不打算对数据库进行任何更改

@PostMapping("/dashboards/{id}/validate")
public ResponseEntity<VisualMetadata> validateVisualMetadata(@PathVariable String id,
                                                             @Valid @RequestBody DashboardDto requestDto) {
}
即使我不打算对数据库进行任何更改,我是否应该使用POST而不是GET

@PostMapping("/dashboards/{id}/validate")
public ResponseEntity<VisualMetadata> validateVisualMetadata(@PathVariable String id,
                                                             @Valid @RequestBody DashboardDto requestDto) {
}
可能吧。有时,在中,您可以找到一种不太常见的、适合您的用例的标准化方法。鉴于资源状态没有预期的更改,您将寻找一种安全的方法

我不相信有一个很好的适合您的用例

但是(通常)用消息体发送GET请求是个坏主意:

GET请求消息中的有效负载没有定义的语义;在GET请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。-

休息点的一部分是,多个组织可以使用标准化的现成解决方案,而且一切都“正常工作”。如果您不需要这样的承诺(您的组织控制着客户机、服务器以及其间的组件),那么您可能可以侥幸逃脱。至少有一段时间


使用
POST
进行安全请求没有什么不合适的。中间组件不一定知道请求是安全的,因此这并不理想(例如,当响应丢失时,中间组件不知道重新发送请求是安全的).

在这一点上做个总结:我只会使用
POST
,而不会为某样东西是否真正安静而绞尽脑汁。做你认为最有意义的事情,并且对以后维护代码的人来说最不意外。我建议使用
POST
。我使用
GET
仅用于请求数据,例如通过ID之类的标识符。