代码之家  ›  专栏  ›  技术社区  ›  VelNaga

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

  •  1
  • VelNaga  · 技术社区  · 7 年前

    我使用的是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映射头 但在swagger中,我希望看到所有的headers参数姓名。所以我们可以传递方法的所有头。使用地图不显示任何东西在招摇。

    2 回复  |  直到 7 年前
        1
  •  2
  •   MohammadReza Alagheband    7 年前

    你可以用 @ModelAttribute


    1.创建一个Header Holder类:

    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);
    }
    

    3.重构getHeaders控制器以使用ModelAttribute

    @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());    
    }
    
        2
  •  -1
  •   drowny    7 年前

    @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"));
    
        }
    

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