2017-01-04 4 views
4

Я следую учебному пособию, а также использовал вопрос Stackoverflow here. Вот мой Java класс:Как использовать параметры запроса в приложении Java Jersey?

package com.crunchify.tutorial; 

import javax.ws.rs.DefaultValue; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.QueryParam; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.MultivaluedMap; 
import javax.ws.rs.core.UriInfo; 
import org.json.simple.JSONObject; 

@Path("api") 
public class CrunchifyAPI { 

    @SuppressWarnings("unchecked") 
    @GET 
    @Path("/get") 
    @Consumes(MediaType.TEXT_PLAIN) 
    public String get(
      @DefaultValue("111") @QueryParam("user") int user, 
      @Context UriInfo uriInfo 
      ) { 
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("user"); 
     System.out.println("Data Received: " + uriInfo.getRequestUri().getQuery() 
       + " | " + nameParam); 
     JSONObject obj = new JSONObject(); 
     obj.put("auth", true); 
     String ret = JSONObject.toJSONString(obj); 
     return ret; 
    } 
} 

Ниже то, что я GET'ing от почтальона:

GET>> localhost/api/get?user=123 

Response является: консольный

{"auth":true} 

Сервер:

Starting Crunchify's Embedded Jersey HTTPServer... 

Started Crunchify's Embedded Jersey HTTPServer Successfully !!! 
Data Received: ?user=123 | null 
User Authenticated: true 

Я пробовал с передачей String, Integer и т. Д., Но ничего не работает. Информация uri печатается правильно, и ответ обратно также прекрасен. Проблема в том, что я не получаю параметр для чтения в Java Code. Мне нужно будет передать многие другие параметры, как только я смогу это сделать. Пожалуйста, предложите. Благодаря!!

+0

Я надеюсь, что он напечатает следующее на консоли сервера: 'Полученные данные:? User = 123 | 123' Аналогичным образом, позже я хотел бы передать String и (если возможно, может быть JSON). –

ответ

1

@QueryParam ("пользователь") ИНТ пользователя

значение этого пользователя междунар должно быть 123

См https://www.mkyong.com/webservices/jax-rs/jax-rs-queryparam-example/

+0

Да. Я ожидаю, что следующие строки будут отображать 123 вместо нуля: 'String nameParam = queryParams.getFirst (" user "); System.out.println («Полученные данные:» + uriInfo.getRequestUri(). GetQuery() + «|» + nameParam); ' Я даже попытался изменить int на String и Integer. Ничего не работает! –

+0

попробуйте System.out.println (пользователь); –

+0

Я пробовал это, и он печатает 111 вместо нулевого значения, то есть значения по умолчанию. 'String nameParam = queryParams.getFirst (« пользователь »); System.out.println ("Полученные данные:" + uriInfo.getRequestUri(). GetQuery() + "|" + nameParam); System.out.println (пользователь); ' Результат: ' Полученные данные:?user = aaaaa | null 111' -> должен быть ** 123 ** –

0

Ну, я думаю, что у вас возникли проблемы с Java-типов.

Если пользователь является Integer вы должны передать его String первым, если вы хотите работать с String (Integer.toString() или String.valueof()).

Но то, как вы передаете параметр, беспокоит меня, я не уверен, можете ли вы передавать целые числа по типам простых типов меди.

2

Я думаю, вы слишком стараетесь. Насколько я могу судить, выполнив следующие действия должны получить, что вы хотите, если вы звоните LOCALHOST/API/получить пользователь = 123:

package com.crunchify.tutorial; 

import javax.ws.rs.DefaultValue; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.QueryParam; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.MultivaluedMap; 
import javax.ws.rs.core.UriInfo; 
import org.json.simple.JSONObject; 

@Path("api") 
public class CrunchifyAPI { 

    @SuppressWarnings("unchecked") 
    @GET 
    @Path("/get") 
    @Consumes(MediaType.TEXT_PLAIN) 
    public String get(
      @DefaultValue("111") @QueryParam("user") Integer user, 
      @Context UriInfo uriInfo 
      ) { 
     System.out.println("Data Received: " + uriInfo.getRequestUri().getQuery() 
       + " | " + name); 
     JSONObject obj = new JSONObject(); 
     obj.put("auth", true); 
     String ret = JSONObject.toJSONString(obj); 
     return ret; 
    } 
} 

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

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