Внимание! Можете не напрягаться над решением, просто подскажите в каком направлении думать!
Имеем очень простой сервис:
@GET
@Path("/search")
@Consumes(MediaType.APPLICATION_JSON)
public Response getSubscriber(@QueryParam("data") SubscriberSearchFormData data){
System.out.println(data);
List <SubscrEntity> results = null //list of results
return Response.ok(results).build();
}
Класс SubscriberSearchFormData:
public class SubscriberSearchFormData {
private String name;
private String street;
private Integer contractNumber;
public static SubscriberSearchFormData fromString(String jsonRepresentation) throws Exception {
System.out.println("WE ARE HERE");
ObjectMapper mapper = new ObjectMapper(); // Jackson's JSON marshaller
SubscriberSearchFormData obj = null;
try {
obj = mapper.readValue(decoded, SubscriberSearchFormData.class);
} catch (IOException e) {
throw new Exception("Wrong JSON parameters!");
}
return obj;
}
//all getters and setters
}
По задумке, JSON должен автоматически парситься благодаря методу fromString в объект класса SubscriberSearchFormData. И с ним дальше будем работать. Но как только я вызываю сервис:
localhost:8080/application/rest/catalog/subscriber/search?data={
"name":"bbb",
"street":"eee",
"contractNumber":5
}
Всё падает из-за ошибки:
11:24:04,050 WARN [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-3) RESTEASY002130:
Failed to parse request.: javax.ws.rs.core.UriBuilderException: RESTEASY003330:
Failed to create URI: http://localhost:8080/application/rest/catalog/subscriber/search?data={%20%22name%22:%22bbb%22,%20%22street%22:%22eee%22,%20%22contractNumber%22:%225%22}
И при этом, System.out.println("WE ARE HERE");
даже не вызывается. То есть оно рушится, ещё даже до вызова fromString();
Копаюсь в этом второй день и всё ничего не удаётся решить.
Установите себе для браузера Chrome расширение - Postman, которое поможет в работе с HTTP запросами.
Реализуйте метод таким образом:
@POST
@Path("/search")
@Consumes(MediaType.APPLICATION_JSON)
public Response getSubscriber(SubscriberSearchFormData data) {
System.out.println(data);
List <SubscrEntity> results = null //list of results
return Response.ok(results).build();
}
Классу SubscriberSearchFormData
необходимо добавить конструктор по умолчанию и Getters/Setters.
Далее отправьте POST запрос на сервер:
И в методе получите ваш объект.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть метод, который конвертирует двумерный массив в ArrayList
Как остановить поток main, пока все ArrayBlockingQueue не выполнятся? То есть, существует main поток в котором я запускаю другие потоки для выполнения...