Skip to content

使用ResponseEntity返回非2xx结果需要将body包装进InvocationException, 这个场景能否优化? #3434

@yhs0092

Description

@yhs0092

业务直接把真正的 body 放在 ResponseEntity 中, 设置好非 2xx 的状态码返回, 遇到 ClassCastException, 因为Java-Chassis假设body是InvocationException类型的, 直接做了转换, 关键代码位置在org.apache.servicecomb.common.rest.filter.inner.ServerRestArgsFilter#beforeSendResponseAsync:

  @Override
  public CompletableFuture<Void> beforeSendResponseAsync(Invocation invocation, HttpServletResponseEx responseEx) {
    Response response = (Response) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE);
    ProduceProcessor produceProcessor =
        (ProduceProcessor) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_PROCESSOR);
    Object body = response.getResult();
    if (response.isFailed()) {
      body = ((InvocationException) body).getErrorData();  // 这里直接强转了 InvocationException 类型
    }

这个算是业务比较常见的开发错误, 对于我们来说答疑的成本高, 但Java-Chassis的优化成本应该不高, 能否做一个自动适配的逻辑呢?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions