2016-05-26 2 views
1

У меня есть веб-сервиса следующим образом:@QueryParam не устанавливает значение

@POST 
@Path("/push") 
@Consumes(MediaType.APPLICATION_JSON) 
public String push(@QueryParam("comment") String comment, 
        @QueryParam("type") String type){ 
    // do something 
} 

и мой запрос тела:

{ 
    "comment" : "comment1", 
    "type" : "type1" 
} 

Мой веб-сервис вызывается, когда соответствующий запрос пост сделан но параметры comment и type имеют значение null. Что здесь не так?

ответ

2

Вы вводите в заблуждение параметр запроса с полезной нагрузкой почтового запроса.

@QueryParameter Параметры запроса извлекаются из параметров запроса URI запроса и указываются с помощью аннотации javax.ws.rs.QueryParam в аргументах параметра метода.

Параметры запроса являются необязательными, если вы их не установили, они будут установлены в нуль.

если вы хотите сохранить «комментарии & типа» в качестве параметра запроса вы должны передать их следующим образом:

http://<HOST:port>/push?comment=comment1&type=type1 

Столб метод Payload вместо этого, что вы будете посылать вместе с запросом вашего POST.

В вашем случае вы передаете «комментарий» и «вводите» в качестве полезной нагрузки, но не привязаны ни к чему.

Если вы хотите получить свою полезную нагрузку, получите сопоставление с объектом, вы должны немного изменить.

Во-первых, создать класс с аннотацией @XmlRootElement

@XmlRootElement  
class MyMessage{ 
String comment; 
String type; 
//add getter and setter 
} 

и ваш отдых API точки входа будет выглядеть следующим образом:

@POST 
@Path("/push") 
@Consumes(MediaType.APPLICATION_JSON) 
public String push(MyMessage message){ 
    String comment = message.getComment() 
    String type = message.getType() 
    // do something 
} 
+0

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

+1

короткий ответ: nop! Что вы можете сделать: принять объект, содержащий все необходимые вам параметры (включая второй параметр, который вы хотите добавить) ИЛИ принять список объектов, например: Список . Позаботьтесь, вам нужно будет соответствующим образом адаптировать полезную нагрузку JSON. – LeTex

+0

Спасибо @LeTeX. – Dandelion

Смежные вопросы