无法使用 androidannotations 发送 POST 参数

Trouble sending POST parameter with androidannotations

所以我尝试使用 androidannotations 从 Android 应用程序向我的 REST 服务器发送一个简单的字符串。

http://localhost:8080/TestServer_RESTJersey/api/lanceurs/parPays

使用高级 REST 客户端 chrome 扩展,我发送参数:

country=Europe

它工作正常。现在 Android 应用程序的问题是服务器收到了我的请求,但国家/地区参数始终为空。我的其他 GET 请求都运行良好。

这是我的 RestClient class :

@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);
    }

在 JAX-RS 中,使用 @QueryParam 注释将 URI 查询参数注入 Java 方法。例如,@QueryParam("country") String countryName, 尝试下面的方法,我想它应该可以工作

    @Post("/api/lanceurs/parPays")
    public LaunchVehicleResponse countryRequest(@QueryParam("country") String country);

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);

好的,看来我想出了一个让自己摆脱困境的方法。

我在我的客户端上创建了一个 class LaunchVehicleRequest,其中包含(除其他外)国家字符串。当我需要向我的服务器发送请求时,我实例化此 class 并使用我想要的值初始化 LaunchVehicleRequest.country(例如:"USA")。然后我将整个对象发送到我的 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);
}

我在服务器端设置了相同的 class,它将请求作为字符串获取,然后将其转换为对象。

@Path("api/lanceurs/parPays")
@POST
public String getLanceurByCountry(String request)
{
    //  request={"country":"USA"}       
    //my json parsing function here
    LaunchVehicleRequest lvreq = parseJsonToRequest(request);
    ...
}

我不知道这是不是最好的方法,但是嘿,它现在工作正常,我正在使用我的 LaunchVehicleRequest class 来满足我可能需要的每个不同的请求,所以这还不错我猜猜^^'

谢谢大家 ;)