当前位置: 首页 > 知识库问答 >
问题:

假装客户端获得请求,从微服务中抛出“方法不允许:请求方法'POST'不支持”

濮阳旺
2023-03-14

我有一个带有spring后端的Vue.js应用程序,它通过一个虚假的客户端向一个“订单”微服务打电话。我有许多使用@PathVariable运行良好的GET请求,但我有一个GET请求,它可以传递任意数量的不同URL参数,并且定义了一个OrderListItemParameters类并将其添加到GET请求中,以便将这些参数传递给微服务。我可以看到请求正在发送到微服务,但它被拒绝,出现了“org.zalando.problem.spring.common.adviceTrait:Method Not alloved:request Method'post'Not supported”错误。

Ive确保feign客户机发送的OrderListItemParameters与微服务中期望的OrderListItemParameters匹配。在假客户端或微服务中都没有提到POST。我只有GET和PUTendpoint。

前端代码的Java后端:

@RestController
@RequestMapping("/api")
public class OrdersResource {

    ## THIS WORKS NO PROBLEM
    @GetMapping("/order/{orderId}")
    public @ResponseBody
    ResponseEntity<?> order(@PathVariable int orderId) throws Exception {
        return ResponseEntity.ok(orderClient.order(orderId));
    }


    ## THIS ENDPOINT IS THE ONE THAT FAILS
    @GetMapping("/order/list")
    public @ResponseBody
    ResponseEntity<?> orders(OrderListItemParameters orderListItemParams) {
        return ResponseEntity
           .ok(orderClient.getOrderList(orderListItemParams));
    }
}

@Component
@AuthorizedUserFeignClient(name = "orders")
public interface OrderClient {

    ## THIS WORKS NO PROBLEM
    @RequestMapping(method = RequestMethod.GET, value = "/api/order/pg/{orderId}")
    String order(@PathVariable("orderId") int orderId);

    ## THIS ENDPOINT IS THE ONE THAT FAILS
    @RequestMapping(method = RequestMethod.GET, value = "/api/order/list")
    String getOrderList(OrderListItemParameters orderListItemParams);
}
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderListItemParameters implements Serializable {

  private String searchPhrase;
  private String startDate;
  private String endDate;
  private ArrayList<String> sortKey;
  private ArrayList<String> sortValue;
  private Integer from;
  private Integer size;
}

(with getters, and setters) 
@Controller
@RequestMapping("/api")
public class OrderController {

  ## THIS WORKS NO PROBLEM
  @GetMapping("/order/pg/{orderId}")
  public @ResponseBody
  Order pgorder(@PathVariable int orderId) {
    return orderService.getPgOrderById(orderId);
  }

  ## THIS ENDPOINT IS THE ONE THAT FAILS
  @GetMapping("/order/list")
  public @ResponseBody
  ResponseEntity getOrderListItemsByMerchant(OrderListItemParameters orderListItemParams) {
    return orderService
        .getOrderListItemsByMerchant(orderListItemParams);
}

共有1个答案

谷梁星雨
2023-03-14

这是最终奏效的解决方案...

#Resource
@GetMapping("/order/list")
public @ResponseBody 
ResponseEntity<?> getOrderListItemsByMerchant(
    @RequestParam Map<String, Object> params) {
    // method code
}

#Feign Client
@RequestMapping(method = RequestMethod.GET, value = "/api/order/list")
ResponseEntity<String> getOrderList(@RequestParam Map<String, Object> params);

#Microservice Controller
@GetMapping("/order/list")
public @ResponseBody
ResponseEntity getOrderListItemsByMerchant(OrderListItemParameters orderListItemParams) {
    // method code
}

这样我就可以用动态参数获取URL,并且微服务仍然将请求视为get。

如果在请求的两边都有相同的定义对象会很好,但我根本无法使@SpringQueryMap或@QueryMap工作。

 类似资料:
  • 我正在使用ajax进行表单更新。当我在ajax中使用GET方法时,它工作得很好,但当我使用Post方法时,它抛出了错误405 method,这是不允许的。我正在本地主机上测试这个。我以前在localhost中做过,效果很好。顺便说一句,我用的是Laravel5.2。 这是我的ajax代码。 这是我在视图中使用的脚本 这是我的路线 当ajax函数和路由中的方法更改为GET时,它会打印在控制台中传递的

  • 我正在尝试使用AJAX POST将我在第三方JS函数(支付网关)的回调函数中得到的响应保存到我的服务器,但我得到的状态代码为-405方法不允许。我得到的响应是-消息:请求方法'POST'不受支持,描述:所请求的资源不允许指定的HTTP方法。 我有以下Javascript客户端代码- 相应的服务器端Spring MVC处理程序- 关于“405方法不允许”的StackOverflow的大多数答案都导致

  • 我得到了405请求方法'GET'在app engine的文件上传过程中不受支持,但在我的本地沙箱中相同的代码运行正常 看起来像bbloservice回调请求应该是POST类型后POST/_ah/上载/...但是当我用Firebug看的时候,它是一个带有以下头的GET请求,我确实在@Controller类中定义了请求处理程序,该类具有方法类型请求方法。POST 标题 响应Headersview源允许

  • 我正在编写一个控制器来处理来自AJAX的帖子。我一直收到一个错误,那篇文章不受支持。我以前在尝试创建后控制器方法时从未遇到过以下错误,我希望有人能发现我在哪里搞砸了。 这是我为控制控制器中的帖子而编写的方法: 使用JQuery 1.10,这是请求它的Ajax调用: 我知道POST地址是正确的,因为将它转换成GET请求就可以了。此外,我还编写了其他POST请求,它们在同一个控制器类中也能正常工作。任

  • login.jsp 用户列表.jsp AppController.java 有2页:login.jsp-起始页,其中包括与登录和密码填充的形式-userlist.jsp结果列表“显示数据库中所有用户持久化”..首先显示登录页面,当我单击提交按钮时,我得到了这个错误:org . spring framework . web . servlet . pagenotfound-不支持请求方法“POST”

  • 下面是我的方法 当调用GET request时,它的工作很好,但是当我们调用POST request和request payload checkout_token=xxxx时,我得到以下错误 编辑 甚至我尝试删除所有参数,但仍然没有运气到目前为止。