Создать пользовательскую аннотацию для заголовка сопоставления запроса spring - PullRequest
0 голосов
/ 09 сентября 2018

Я использую 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 Map headers , но в swagger я хотел бы видеть все параметры заголовков name.so, чтобы мы могли передавать все заголовки для методов. При использовании карты ничего не отображается в чванстве.

Любой намек или предложение будут заметны.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вы можете использовать @ModelAttribute для этой цели:


1.Создайте класс держателя заголовка:

public class MyheaderHolder {
    private String sample;
    private String sample1;
    private String sample2;
    private String sample3;
    private String sample4;
    //getter setters
}

2. Определите атрибут модели:

@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());    
}
0 голосов
/ 09 сентября 2018

Вы можете использовать @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.Ты можешь получить то, что тебе нужно.

...