Вопрос по – Передача неопределенных параметров запроса с RESTful URL и чтение их в RESTEasy

3

У меня есть требование для разработки RESTful Service с использованием RESTEasy. Клиенты могут вызывать эту общую услугу с любым количеством параметров запроса, которое они хотят. Мой код REST должен каким-то образом читать эти параметры запроса. Например, если у меня есть служба поиска книг, клиенты могут совершать следующие звонки.

http://domain.com/context/rest/books/searchBook?bookName=someBookName
http://domain.com/context/rest/books/searchBook?authorName=someAuthor& pubName=somePublisher
http://domain.com/context/rest/books/searchBook?isbn=213243
http://domain.com/context/rest/books/searchBook?authorName=someAuthor

Я должен написать класс обслуживания, как показано ниже, чтобы справиться с этим.

@Path("/books")
   public class BookRestService{

    // this is what I currently have, I want to change this method to in-take all the 
    // dynamic parameters that can come
    @GET
    @Path("/searchBook")
    public Response searchBook(@QueryParam("bookName") String bookName,@QueryParam("isbn") String isbn) {

     // fetch all such params
     // create a search array and pass to backend

    }

    @POST
    @Path("/addBook")
    public Response addBook(......) {
    //....
     }
    }

Извините за плохой формат (я не могу понять, как форматирование кода работает в этом редакторе!). Как видите, мне нужно изменить метод searchBook (), чтобы он принимал любое количество параметров запроса.

Я видел подобный пост здесь, но не смог найти правильного решения.

Как создать RESTful URL для поиска с дополнительными параметрами?

Может ли кто-нибудь пролить свет на это, пожалуйста?

Ваш Ответ

2   ответа
7

Лучше всего в этом случае использовать DTO, содержащий все поля ваших критериев поиска. Например, вы упомянули 4 различных параметра.

  1. Book Name (bookName)
  2. Author Name (authorName)
  3. Publisher Name (pubName)
  4. ISBN (isbn)

Создайте DTO, содержащий поля со следующими аннотациями для каждого свойства, для которого вы хотите сопоставить параметры:

public class CriteriaDTO{

  @QueryParam("isbn")
  private String isbn;
.
.

Other getter and setters of other properties

}

Вот метод, который делает это для вашей справки:

@GET
@Produces("application/json")
@Path("/searchBooks")
public ResultDTO search(@Form CriteriaDTO dto){
}

использование следующего URL автоматически заполнит свойство CriteriaDTO isbn:

your.server.ip: порт / URL / Mapping / searchBooks = 123456789 ISBN & амп; pubName = тестирование

Error: User Rate Limit Exceeded
1

Подобный вопрос был задан здесь:Как вы сопоставляете несколько параметров запроса с полями компонента по запросу GET в Джерси?

Вместо этого я пошел с ответом Кенсена Джона (UriInfo). Это позволило просто перебрать набор, чтобы проверить, какие параметры были переданы.

Похожие вопросы