Как принять аргумент GET как сложный объект - PullRequest
0 голосов
/ 04 июня 2018

Мой входной параметр выглядит следующим образом:

2Y - (2 года)
28D - (28 дней)
3M - (3 месяца)

Я хочу принять такой аргумент:

public class InputDateInterval {
    private int count;
    private IntervalType intervalType;
    ...
}

public enum IntervalType {
    DAY("D"),
    MONTH("M"),
    YEAR("Y");

    private String sign;

    IntervalType(String sign) {
        this.sign = sign;
    }

Контроллер должен выглядеть так:

@GetMapping(...)
public Object(InputDateInterval idi, String anotherArgument, String...) {
    ....
}

Как мне добиться этого весной mvc?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Вы должны использовать RequestBody

@GetMapping
public void goGetStuff(@RequestBody InputDateInterval inputDateInterval) {
    ...
}

Тем не менее, я бы порекомендовал вам проверить ваш дизайн API.Я бы не получил GET с более чем парой параметров

0 голосов
/ 04 июня 2018

Стандартным способом является реализация и регистрация интерфейса MvcArgumentResolver.В вашей реализации вы получите доступ к объекту http-запроса, а затем реализуете собственную логику для сопоставления параметров запроса с вашим типом аргумента.

0 голосов
/ 04 июня 2018

Вы должны объединить все аргументы в один объект, довольно разные аргументы.Для этого вы должны использовать метод POST.

   @PostMapping("/someUri")
    public Object complexObjectMapping(RequestObject request) {
       //do processing for request object as needed
       return something;
    }

Вы должны определить класс для вашего сложного объекта запроса, который будет содержать все возможные аргументы.

public class RequestObject{
      private InputDateInterval idi;
      private String anotherArgument;


      //getter and setter
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...