无法使用androidannotations发送POST参数

时间:2016-03-11 15:34:57

标签: android post android-annotations

所以我尝试使用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);
    }

3 个答案:

答案 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;

无论如何,谢谢大家;)