Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为spring请求映射头创建自定义注释_Java_Spring_Spring Mvc_Spring Boot_Spring Annotations - Fatal编程技术网

Java 为spring请求映射头创建自定义注释

Java 为spring请求映射头创建自定义注释,java,spring,spring-mvc,spring-boot,spring-annotations,Java,Spring,Spring Mvc,Spring Boot,Spring Annotations,我使用的是spring-boot-1.5.6。我有一个控制器在里面,我有大约8个请求的映射,它有共同的头。下面提到的头对于控制器中的大多数方法都是必需的,提到所有的头看起来很难看,有没有任何方法可以概括或自定义注释,这样我就不想在所有方法中复制头了 @RestController public class RestController { private static final Logger logger = LoggerFactory.getLogger(RestController.c

我使用的是spring-boot-1.5.6。我有一个控制器在里面,我有大约8个请求的映射,它有共同的头。下面提到的头对于控制器中的大多数方法都是必需的,提到所有的头看起来很难看,有没有任何方法可以概括或自定义注释,这样我就不想在所有方法中复制头了

@RestController
public class RestController {
  private static final Logger logger = LoggerFactory.getLogger(RestController.class);

  /**
   * Simply chooses a few headers, logs them and add them to model to
   * showHeaders view to render to the user.
   */

  @GetMapping(value="/showheaders")

  public String getHeaders(
          @RequestHeader(value="sample") String sample,
          @RequestHeader(value="sample1") String sample1,
          @RequestHeader(value="sample2") String sample2,
          @RequestHeader(value="sample3") String sample3,
          @RequestHeader(value="sample4") String sample4) {
    logger.info("Inside getHeaders() method...");
    logger.info("sample : " + sample);
    logger.info("sample1 : " + sample1);
    logger.info("sample2 : " + sample2);
    logger.info("sample3 : " + sample3);
    logger.info("sample4 : " + sample4);

  }
预期:

@RestController
    public class RestController {
      private static final Logger logger = LoggerFactory.getLogger(RestController.class);

      /**
       * Simply chooses a few headers, logs them and add them to model to
       * showHeaders view to render to the user.
       */

      @GetMapping(value="/showheaders")

      public String getHeaders(@MyHeaders headers) {
        logger.info("Inside getHeaders() method...");
        logger.info("sample : " + sample);
        logger.info("sample1 : " + sample1);
        logger.info("sample2 : " + sample2);
        logger.info("sample3 : " + sample3);
        logger.info("sample4 : " + sample4); 

      }
我知道我们可以使用@RequestHeader映射headers,但在swagger中,我希望看到所有headers参数名称。这样我们就可以传递方法的所有头。使用地图时,不要大摇大摆地显示任何内容


任何提示或建议都是值得注意的。

您可以像这样使用
@RequestHeader

@GetMapping(value="/showheaders")
    public String getHeaders(@RequestHeader Map<String, String> myHeaders) {
        logger.info("Inside getHeaders() method...");
        logger.info("sample : " + myHeaders.get("sample"));
        logger.info("sample1 : " + myHeaders.get("sample1"));
        logger.info("sample2 : " + myHeaders.get("sample2"));
        logger.info("sample3 : " + myHeaders.get("sample3"));
        logger.info("sample4 : " + myHeaders.get("sample4"));

    }
@GetMapping(value=“/showheaders”)
公共字符串getHeaders(@RequestHeader映射myHeaders){
info(“内部getHeaders()方法…”);
logger.info(“示例:+myHeaders.get(“示例”);
logger.info(“sample1:+myHeaders.get”(“sample1”);
logger.info(“sample2:+myHeaders.get”(“sample2”);
logger.info(“sample3:+myHeaders.get”(“sample3”);
logger.info(“sample4:+myHeaders.get”(“sample4”);
}

请求标头在映射中设置。你可以得到你需要的。

你可以使用
@modeldattribute
来实现这个目的:


1.创建标题持有者类:
2.定义模型属性:
3.重构getHeaders控制器以使用ModelAttribute
您是否尝试过
@RequestHeader-HttpHeaders
?@amardepbhowmick感谢您的回复。我还没试过。你能分享一下这个链接或文档吗?这有什么好处?我想看到头条的名字在招摇过市检查这一点:非常感谢你的回答。它工作正常,但在swagger中,它显示为请求参数,而不是请求头。我们如何解决它呢?这似乎是swagger()的一个问题,我也已经遇到了这个问题,但可以找到任何解决方法,我认为值得为此提出另一个问题@维尔纳加
public class MyheaderHolder {
    private String sample;
    private String sample1;
    private String sample2;
    private String sample3;
    private String sample4;
    //getter setters
}
@ModelAttribute("myHeaderHolder")
public Something addSomething(@RequestHeader(value = "sample") String sample,
    @RequestHeader(value = "sample1") String sample1,
    @RequestHeader(value = "sample2") String sample2,
    @RequestHeader(value = "sample3") String sample3,
    @RequestHeader(value = "sample4") String sample4) {
    return new MyHeaderHolder(name);
}
@GetMapping(value = "/showheaders")
public String getHeaders(@ModelAttribute MyHeaderHolder myHeaderHolder) {
    logger.info("Inside getHeaders() method...");
    logger.info("sample : " + myHeaderHolder.getSample());
    logger.info("sample1 : " + myHeaderHolder.getSample1());
    logger.info("sample2 : " + myHeaderHolder.getSample2());
    logger.info("sample3 : " + myHeaderHolder.getSample3());
    logger.info("sample4 : " + myHeaderHolder.getSample4());    
}