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

如何在Spring Boot中访问RestController方法(endpoint)返回的POJO?

冯卓
2023-03-14

我希望能够在RestController方法(或endpoint)作为数据流序列化为HttpServletResponse之前修改它返回的POJO。但是我希望能够在控制器方法代码之外(作为中间件)完成。

我曾尝试使用HandlerInterceptor来完成此操作,但我无法访问POJO。我也尝试过使用AOP,但从未调用切入点。

@RestController
public class TestController {
  @GetMapping("/test")
  public Resource<User> getTest() {
    Resource<User> resource = new Resource<>();
    resource.setData(new User("test user"));
    return resource;
  }


  @Builder
  @Getter
  @Setter
  @AllArgsConstructor
  static class User {
    private String username;
  }

  @Getter
  @Setter
  @AllArgsConstructor
  @NoArgsConstructor
  static class Resource<T> {
    private T data;
    private Set<String> errors;
  }
}

我希望能够在控制器执行自己的逻辑并返回后,向控制器返回的资源添加错误列表(如果需要)。

共有1个答案

苏健柏
2023-03-14

要在从@restcontroller方法返回后但在将其写入HTTP响应之前更改该对象,可以实现ResponseBodyAdvise并将其声明为@ControllerAdvisebean:

@ControllerAdvice
public static class Foo implements ResponseBodyAdvice {

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
            Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {

        //body is the object return from the @RestController method
        //Cast it and modify it accordingly.
        if(body instanceof Resource) {
            Resource res = (Resource)body;
            //Modify it .... blablablba
        }
        return body;
    }
}
 类似资料:
  • 我有base64字符串,我想使用Spring的RESTController在img标记上打印base64图像。 图像不输出。有什么问题?

  • tl;如果在Docker容器中运行,一个RestController正确回答,另一个则不正确。 该服务有两个API 和。 它们都是通过docker compose运行的。 返回。 返回一个空的200响应。正如预期的那样。 应该返回一个200响应和一个每次调用API时都会增加的数字。可悲的是,事实并非如此。 在本地运行该服务可以提供预期的结果。 maven spotify插件用于从以下创建图像。 我

  • 我在Spring后端项目中有方法A,在执行不同的方法B后应该调用它。返回方法B的类型是void,但在成功执行方法B后,我需要将一个输入参数从方法B传递到方法A。

  • 一个db家伙在PostgreSQL上编写了以下查询。它将返回此json: 我需要创建一个具有这些id的模型类,并将这个json值插入到该模型类中,plz是否有人可以帮助。。。如果它返回我可以处理的结果集,但它返回的是json,那么请给我一个合适的代码来克服朋友和成员。提前谢谢 查询:

  • 我希望在spring boot中返回类似以下内容的json响应: 我的RestController如下所示 但我得到的反应是这样的

  • 我正在尝试在从CrudRepository扩展的存储库接口上执行我试图在方法中使用存储库实现来执行此操作。当我运行以下代码时,线程在 UpdateTasksService List 中永久等待