Spring Cloud Openfeign Get请求发生405错误

  • kust-retrieve服务
@Resource
private AuthFeignService authFeignService;

@ApiOperation("获取用户信息")
@GetMapping("/get/user")
public ResponseEntity<UserMsgDTO> getUserName(HttpServletRequest request){
    String token = request.getHeader("token");
    UserMsgDTO userMsg = authFeignService.getUserMsg(token);
    log.info("userMsg -> {}", userMsg);
    return Results.success(userMsg);
}

@FeignClient("kust-auth")
public interface AuthFeignService {
    @GetMapping("/auth/get/user")
    UserMsgDTO getUserMsg(String jwtToken);
}
  • kust-auth服务
@ApiOperation("获取token中的用户名信息")
@GetMapping("/get/user")
public UserMsgDTO getUserMsg(String jwtToken){
    log.info("jwtToken -> {}", jwtToken);
    return JwtUtils.getUSerNameByJwtToken(jwtToken);
}
  • kust-retrieve服务报错如下:
    feign.FeignException$MethodNotAllowed: status 405 reading AuthFeignService#getUserMsg(String)
  • kust-auth服务报错如下:
    Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
  • 原因:在feign接口中没指定请求参数的位置,参数:"String jwtToken" 会被默认封装到请求体中,feign在传递请求时会检查请求体是否为空,不为空就将Get请求转为Post,而接受的服务kust-auth中的方法是Get,自然会报错405
  • 解决如下:使用@RequestParam("jwtToken") 明确参数的位置,注意:括号中的字符串必须写,不然启动报错
@FeignClient("kust-auth")
public interface AuthFeignService {
    @GetMapping("/auth/get/user")
    UserMsgDTO getUserMsg(@RequestParam("jwtToken") String jwtToken);
}
  • 再次启动,可以正常拿到数据
    2022-01-25 11:28:43.577 INFO 16236 --- [nio-9001-exec-9] com.kust.search.api.v1.TokenController : userMsg -> UserMsgDTO(id=4, name=刘小胖同学)
posted @ 2022-01-25 11:36  刘小胖同学  阅读(794)  评论(0)    收藏  举报