所以我尝试使用androidannotations从Android应用程序向我的REST服务器发送一个简单的字符串。
http://localhost:8080/TestServer_RESTJersey/api/lanceurs/parPays
使用高级REST客户端chrome扩展,我发送参数:
country=Europe
它工作正常。现在我的Android应用程序问题是服务器收到了我的请求,但country参数始终为null。我的其他GET请求都完美无缺。
这是我的RestClient类:
@Rest(converters = {MappingJacksonHttpMessageConverter.class, FormHttpMessageConverter.class})
public interface RestClient extends RestClientRootUrl, RestClientSupport{
@Get("/poke/simple")
public MessageResponse simplePoke();
@Get("/api/lanceurs/{name}")
public LaunchVehicleResponse nameRequest(String name);
//server doesn't get the parameter here...
@Post("/api/lanceurs/parPays")
public LaunchVehicleResponse countryRequest(String country);
}
任何帮助都会像往常一样受到赞赏,谢谢!
编辑:
服务器端REST api:
@Path("api/lanceurs/parPays")
@POST
public String getLanceurByCountry(@FormParam("country") String country)
{
initData();
LaunchVehicleResponse lvr = new LaunchVehicleResponse();
ArrayList<LaunchVehicle> allv = myDatabase.getDataByCountry(country);
lvr.setData(allv);
return parseObjectToJson(lvr);
}
答案 0 :(得分:0)
在JAX-RS中,使用@QueryParam注释将URI查询参数注入Java方法。例如,@ QueryParam(&#34; country&#34;)String countryName, 尝试以下,我猜,它应该工作
@Post("/api/lanceurs/parPays")
public LaunchVehicleResponse countryRequest(@QueryParam("country") String country);
答案 1 :(得分:0)
正如wiki所述,您可以通过以下方式发送表单参数:
@Rest(rootUrl = "http://company.com/ajax/services", converters = { FormHttpMessageConverter.class, MappingJackson2HttpMessageConverter.class })
public interface MyRestClient extends RestClientHeaders {
@RequiresHeader(HttpHeaders.CONTENT_TYPE)
@Post("/api/lanceurs/parPays")
public LaunchVehicleResponse countryRequest(MultiValueMap<String, Object> data);
}
MultiValueMap<String, Object> data = new LinkedMultiValueMap<>();
data.set("country, "Europe");
client.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE);
client.countryRequest(data);
答案 2 :(得分:0)
好吧,我似乎找到了摆脱困境的方法。
我在我的客户端上创建了一个LaunchVehicleRequest类,其中包含一个国家字符串(以及其他内容)。当我需要向我的服务器发送请求时,我实例化这个类并使用我想要的值初始化LaunchVehicleRequest.country(例如:&#34; USA&#34;)。然后我将整个对象发送到我的RestClient。
LaunchVehicleRequest lvreq = new LaunchVehicleRequest();
lvreq.setCountry("Europe");
LaunchVehicleResponse lvr = pm.countryRequest(lvreq);
...
@Rest(converters = {MappingJacksonHttpMessageConverter.class, FormHttpMessageConverter.class}, interceptors = { LoggingInterceptor.class } )
public interface RestClient extends RestClientRootUrl, RestClientSupport, RestClientHeaders{
@Post("/api/lanceurs/parPays")
public LaunchVehicleResponse countryRequest(LaunchVehicleRequest request);
}
我在服务器端设置了相同的类,它将请求作为字符串获取,然后将其转换为对象。
@Path("api/lanceurs/parPays")
@POST
public String getLanceurByCountry(String request)
{
// request={"country":"USA"}
//my json parsing function here
LaunchVehicleRequest lvreq = parseJsonToRequest(request);
...
}
我不知道这是最好的方法,但是现在它工作得很好而且我使用LaunchVehicleRequest类来处理我需要的每个不同的请求,所以它&#39 ; s不是那么糟糕我猜^^&#39;
无论如何,谢谢大家;)