用swagger测试java接口,报错TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body.

经过查找原因是由于方法中申明的是get方法却用了@requestBody,我们只要这个参数前的声明去掉就可以了。

下面介绍下常用请求方式和参数的对应关系

1、Post请求

RequestMethod.POST---》@RequestBody

RequestMethod.POST---》@RequestParam  这个既可以从body中获取也可从url获取

例如下面方法

 @ResponseBody

 @RequestMapping(value = { "/listFunc" }, method = RequestMethod.POST,produces="application/json;charset=UTF-8")

 @ApiResponses(value = {@ApiResponse(code = 200, message = "XXX",  response=String.class),

@ApiResponse(code = 201, message = "q"+ "(token验证失败)",  response=String.class),

@ApiResponse(code = 202, message = "500" + "(系统错误)",response = String.class)})

@ApiOperation(value="查询列表",notes="/list",response = String.class)

    public  BaseResponse> getList(@RequestBody(required = false) ModelRequest request) { 

 }

2、Get请求

RequestMethod.GET---》这种可以有参数用模型驱动,或者属性驱动获取,但是不可以用@注解从body获取,如果这样写就会报我上面开头的错误。

 (不需要注解)  从url后获取

 @PathVariable   斜杠路劲中获取

 @RequestMapping(value = { "/modal" }, method = RequestMethod.GET)

    public String getinfo(XBusiness business , ModelMap modelMap) throws IOException {

}

在SpringBoot 中,两者的作用都是将request里的参数的值绑定到控制器contorl里的方法参数里,区别在于,URL写法不同。

使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值

使用@PathVariable时,URL是这样的:http://host:port/path/参数值

下面用代码举例

@RequestMapping(value="/user",method = RequestMethod.GET)
    public CommonRlt queryUser(@RequestParam String userId) {
        return new CommonRlt(BasicRestStatusEnum.Ok.code(),userService.queryUserById(userId));
    }
    
    @RequestMapping(value="/user/{userId}",method = RequestMethod.GET)
    public CommonRlt queryUser1(@PathVariable String userId) {
        return new CommonRlt(BasicRestStatusEnum.Ok.code(),userService.queryUserById(userId));
  }

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐