将认可的GET方法称为POST

时间:2017-12-07 22:39:27

标签: spring spring-cloud-feign

我的服务定义如下

class Echo {
  private String message; // getters and setters omitted
}

@RequestMapping("/app")
interface Resource {
  @RequestMapping(method = GET)
  Echo echo(@ModelAttribute Echo msg);
}

@RestController
class ResourceImpl implements Resource {
  @Override
  Echo echo(Echo msg) { return msg; }
}

和他的客户在不同的应用程序

@FeignClient(name = "app", url = "http://localhost:8080")
interface Client extends Resource {}

但是,当我调用资源方法时

@Autowired
private Resource client;

@Test
public void test() {
  Echo echo = new Echo();
  echo.setMessage("hello");
  client.echo(echo);
}

我收到了一条令人困惑的错误消息

  

feign.FeignException:状态405读取ClientLocal #echo(Echo);   内容:{“timestamp”:1512686240485,“status”:405,“error”:“方法不是   允许 “ ”异常“: ”org.springframework.web.HttpRequestMethodNotSupportedException“, ”消息“:” 请求   方法'POST'不受支持“,”路径“:”/ app“}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

发现了相同的问题,对我来说,Feign使用GET进行POST混合的原因是将Object用作请求参数

与您的错误相同:

@GetMapping("/followers/{userId}/id")
Page<String> getFollowersIds(@PathVariable String userId, Pageable pageable);

在@RequstParam中添加了2个参数来修复它,例如:

@GetMapping("/followers/{userId}/id")
Page<String> getFollowersIds(@PathVariable String userId, @RequestParam Pageable pageable);