Spring中GET请求中将请求参数/路径变量Map到Dto

osh3o9ms  于 5个月前  发布在  Spring
关注(0)|答案(2)|浏览(60)

我想创建一个控制器,它将返回页面对象。我需要页面Pageable有页码和它的大小(它不能大于50)和一些变量,这将是搜索条件。如果这是一个POST请求,它可能看起来如下:
public Page<SomeDto) getDto(@RequestBody @Valid RequestDto requestDto, Page pageRequest)
然而,这是一个GET请求,所以@RequestBody不能/不应该被使用。另外,我想有一些类似于@Valid的东西,这样Spring会自动拒绝错误的请求。
我想知道:
1.这是可能的,如果是这样的话,如何实现这一点,并已创建Dto从值取自URL(@PathVariable或@RequestParam),就好像它是POST请求Map身体到对象。
我想避免使用某种代码:
public String updateFoos(@RequestParam Map<String,String> allParams) {}
1.如果第1条所述的不可能实现,那么什么解决方案最接近于满足这些要求?

q35jwt9p

q35jwt9p1#

无论使用什么HTTP方法,您都可以为每个HTTP请求使用HTTP主体(因此也可以使用@RequestBody)。但是,为GET请求使用HTTP主体并不是一个好的REST API设计(参见https://martinfowler.com/articles/richardsonMaturityModel.html
您可以使用@PathVariable或@RequestParam参数进行bean验证,只需将所需的注解放在这些注解旁边即可

b1zrtrql

b1zrtrql2#

对于GET方法中的request param,只需创建一个class并声明与param同名的字段。然后使用class作为request param。Spring会自动将url paramMap到字段。
举例来说:

@Data
class RequestDTO{
    private Long userId;
    private Long customName;
}

@GetMapping("/test")
public void testRequest(RequestDTO request){

}

字符串
当你发送一个像/test?userId=1&customName=Mike这样的url时,参数将被Map到RequestDTO

相关问题