我正在为我的 Web 应用程序使用“admin-on-rest”UI,它有以下限制:
注意:jsonServer REST 客户端期望 API 包含
响应 GET_LIST 调用中的 X-Total-Count 标头。该值必须
是集合中资源的总数。这允许
admin-on-rest 了解总共有多少页资源,
并构建分页控件。
我通过手动将 X-Total-Count 标头添加到返回 REST 端点的列表中解决了该问题,如下所示:response.addHeader("X-Total-Count", String.valueOf(outputList.size()));
但我想知道:是否有一些优雅的方法可以在 Spring 中自动执行此操作?我的意思是,当某个端点返回 JSON 列表时,自动添加具有正确值的标头?
就在这里! (如果您使用的是 spring 4.1 或更高版本)。
它被称为响应正文建议 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyAdvice.html它使您能够拦截调用(就在响应写入之前并提供对原始 http 响应的访问)。
基本上你需要的是实现这样的控制器建议:
@ControllerAdvice
public class ResourceSizeAdvice implements ResponseBodyAdvice<Collection<?>> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
//Checks if this advice is applicable.
//In this case it applies to any endpoint which returns a collection.
return Collection.class.isAssignableFrom(returnType.getParameterType());
}
@Override
public Collection<?> beforeBodyWrite(Collection<?> body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
response.getHeaders().add("X-Total-Count", String.valueOf(body.size()));
return body;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)