import YOUR_PACKAGE_ANNOTATION.ResponseHeaders;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* Aspect for inserting headers on the methods of the @RestController
annotated classes
*/
@Aspect
@Component
public class ResponseHeadersAnnotation {
/**
* Pointcut for filtering just classes with @RestController annotation
*/
@Pointcut("@within(org.springframework.web.bind.annotation.RestController)")
public void restControllerClass() {
}
/**
* It adds the headers to the response of the method of the controller
*
* @param responseHeaders
*/
@After("restControllerClass() && @annotation(responseHeaders)")
public void addHeaders(final ResponseHeaders responseHeaders) {
final HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
List.of(responseHeaders.headers()).forEach(responseHeader -> response.setHeader(responseHeader.key(), responseHeader.value()));
}
}
下面是如何在控制器中使用它的示例:
@GetMapping(value = {"/ServiceTicketCollection", "/ServiceRequestCollection"})
@ResponseHeaders(headers = {
@ResponseHeader(key = "cookie1", value = "value1"),
@ResponseHeader(key = "cookie2, value = "value2")
})
public Object restControllerMethod() {
...
}
2条答案
按热度按时间hmtdttj41#
我没有找到任何已经做了有一个添加值的标题注解,所以我自己做了。下面是代码,很简单,我用SpringAOP做的
我创建了注解类
以及一个包含标题和注解的数组
用于捕捉restcontrollers的aop类(您可以自定义aop,以便根据需要设置自己的切入点:
下面是如何在控制器中使用它的示例:
zpqajqem2#
这是一个关于如何使用springwebflux为头提供默认值的示例
这是给SpringWeb的