REST API design - необязательные параметры запроса - PullRequest
0 голосов
/ 04 апреля 2020

Я написал это сопоставление запроса для доступа к заявке по ее идентификатору:

@GetMapping(path = "/tickets/{ticketId}")
   @ResponseStatus(value = HttpStatus.OK)
    public ResponseEntity<List<TicketResponse>> getTicketsById(@PathVariable("ticketId") final Long ticketId

Я планирую добавить несколько параметров запроса для поддержки фильтрации, таких как ticketType, ticketStatus. Пользователи REST API должны иметь возможность фильтрации по любому или всем параметрам запроса.

Каковы принципы разработки REST API для достижения этой цели? Должен ли я добавить новые параметры запроса для поддержки фильтрации, как показано ниже? :

@GetMapping(path = "/tickets/{ticketId}")
   @ResponseStatus(value = HttpStatus.OK)
    public ResponseEntity<List<TicketResponse>> getTicketsById(@PathVariable("ticketId") final Long ticketId, @RequestParam("ticketType") final String ticketType, @RequestParam("ticketStatus") final String ticketStatus)

Существует ли шаблон проектирования Spring для этого сценария? Шаблон компоновщика Java может быть использован, где параметр атрибут объекта QueryParameter?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2020

В основном у вас есть две опции:

  1. Либо вы помещаете все свои RequestParams в качестве параметров метода, но с required=false, как писал @AmitKumar. Пример: @RequestParam(name="ticketType", required = false) String ticketType

  2. Поместите все эти параметры в, скажем, FilterDTO и получите его в качестве параметра (FilterDTO filter). Spring обязательно заполнит свои поля вашими RequestParams. Просто поместите ваш ticketType и другие параметры в DTO как поля, и они будут необязательными. Пример: public ResponseEntity<List<TicketResponse>> getTicketsById(@PathVariable("ticketId") ong ticketId, FilterDto filter){}

2 голосов
/ 04 апреля 2020

Если вы хотите сделать параметр необязательным. вам нужно добавить обязательно = ложь.

public ResponseEntity<List<TicketResponse>> getTicketsById(@PathVariable("ticketId") final Long ticketId, @RequestParam(name="ticketType", required=false) final String ticketType, @RequestParam(name="ticketStatus",required=false) final String ticketStatus)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...