gpt4 book ai didi

java - 是否有任何选项可以在 spring boot 中为所有 @RequestHeaders 添加默认值?

转载 作者:行者123 更新时间:2023-12-05 09:36:38 26 4
gpt4 key购买 nike

是否有任何选项可以为 spring boot 中的所有 @RequestHeader 添加默认值?

@RequestHeader(value = "User-Accept-Language", defaultValue = "en-IN") String localeCd

我正在复制/粘贴到所有 API。避免代码重复的任何帮助!!

最佳答案

我没有找到任何已经完成的用于添加带有值的 header 的注释,所以我自己做了。这是代码,很简单,我是用spring AOP做的

  1. 我创建了注解类

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface ResponseHeader {

    public String key() default "";

    public String value() default "";
    }

    还有一个包含一组 Headers 注释的

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;


    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface ResponseHeaders {

    public ResponseHeader[] headers();
    }
  2. 用于捕获 restController 的 AOP 类(您可以根据需要自定义 AOP 以设置您自己的切入点:

    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()));
    }
    }
  3. 这是一个如何在 Controller 中使用它的例子:

    @GetMapping(value = {"/ServiceTicketCollection", "/ServiceRequestCollection"})
    @ResponseHeaders(headers = {
    @ResponseHeader(key = "cookie1", value = "value1"),
    @ResponseHeader(key = "cookie2, value = "value2")
    })
    public Object restControllerMethod() {
    ...
    }

关于java - 是否有任何选项可以在 spring boot 中为所有 @RequestHeaders 添加默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65000113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com