Android 我应该如何将json放入GET请求中?

Android 我应该如何将json放入GET请求中?,android,regex,json,spring-android,Android,Regex,Json,Spring Android,我想为android实现spring的GET请求。我不知道应该如何在url中添加json。网址是: context.getString(R.string.url)+“服务/促销?限制=10&where={expiredAt:{$gte:\”“+getCurrentDate()+“\”}”我想设置,但请求失败,在logcat上出现此错误: 索引附近的regexp模式中出现语法错误\Qhttp://baas.papata.ir/services/promotions?limit=1&where=\E

我想为android实现spring的GET请求。我不知道应该如何在url中添加json。网址是:

context.getString(R.string.url)+“服务/促销?限制=10&where={expiredAt:{$gte:\”“+getCurrentDate()+“\”}”我想设置,但请求失败,在logcat上出现此错误:

索引附近的regexp模式中出现语法错误\Qhttp://baas.papata.ir/services/promotions?limit=1&where=\E({$gte:“2014-05-05T14:48:20Z”)\Q}\^

有什么问题

更新:我使用该url的类是:

public class GetPromotion extends AsyncTask<Void, Void, Promotion[]> {

private String SERVICE_ID = "5345345";
private String API_VERSION = "0.1.0";
private String url;
private String clientId;
private Context context;
private OnGetPromotion onGetPromotion;

public GetPromotion(Context context, String clientId){
    url = context.getString(R.string.url) + "services/promotions?limit=10&where={expiredAt:{$gte: \""+getCurrentDate()+"\"}}";
    this.clientId = clientId;
    this.context = context;
}
@Override
protected Promotion[] doInBackground(Void... voids) {
    try {
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.add("firstParam", API_VERSION);
        requestHeaders.add("secondParam", SERVICE_ID);
        requestHeaders.add("Cache-Control", "no-cache");

        requestHeaders.setAccept(Collections.singletonList(new MediaType("application", "json")));
        HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
        RestTemplate restTemplate = new RestTemplate(true);
        restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
        restTemplate.getMessageConverters().add(
                new MappingJackson2HttpMessageConverter());
        restTemplate.getMessageConverters().add(
                new StringHttpMessageConverter());
        ResponseEntity<Promotion[]> response = restTemplate
                .exchange(url, HttpMethod.GET, requestEntity,
                        Promotion[].class);
        return response.getBody();

    } catch (Exception e)
        return null;
    }

}

@Override
protected void onPostExecute(Promotion[] result) {
    super.onPostExecute(result);
    onGetPromotion.getOnGetPromotion(result);
}

private String getCurrentDate() {
    TimeZone tz = TimeZone.getTimeZone("UTC");
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    df.setTimeZone(tz);
    return df.format(new Date());
} 
}
公共类GetPromotion扩展异步任务{
专用字符串服务\u ID=“5345345”;
私有字符串API_VERSION=“0.1.0”;
私有字符串url;
私有字符串clientId;
私人语境;
私人OnGetPromotion OnGetPromotion;
公共GetPromotion(上下文,字符串clientId){
url=context.getString(R.string.url)+“服务/促销?限制=10&where={expiredAt:{$gte:\”“+getCurrentDate()+“\”}”;
this.clientId=clientId;
this.context=上下文;
}
@凌驾
受保护的促销[]doInBackground(无效…无效){
试一试{
HttpHeaders requestHeaders=新的HttpHeaders();
添加(“firstParam”,API_版本);
添加(“secondParam”,服务ID);
添加(“缓存控制”、“无缓存”);
setAccept(Collections.singletonList(新媒体类型(“应用程序”、“json”));
HttpEntity requestEntity=新的HttpEntity(requestHeaders);
RestTemplate RestTemplate=新的RestTemplate(true);
setRequestFactory(新的HttpComponentsClientHttpRequestFactory());
restTemplate.getMessageConverters().add(
新映射Jackson2HttpMessageConverter());
restTemplate.getMessageConverters().add(
新的StringHttpMessageConverter());
ResponseEntity响应=restTemplate
.exchange(url、HttpMethod.GET、requestEntity、,
晋升[]班);
返回response.getBody();
}捕获(例外e)
返回null;
}
}
@凌驾
受保护的void onPostExecute(升级[]结果){
super.onPostExecute(结果);
onGetPromotion.getOnGetPromotion(结果);
}
私有字符串getCurrentDate(){
时区tz=时区。getTimeZone(“UTC”);
DateFormat df=新的简化格式(“yyyy-MM-dd'T'HH:MM:ss'Z'”;
设置时区(tz);
返回df.format(新日期());
} 
}

您需要将json编码为URL,然后与服务URL连接。此外,您还需要用
引用密钥


更好的方法是使用
POST
来提交数据,而不是
GET

对不起,我还有一个问题,因为我使用的是spring,url编码了两次,然后请求失败。我不知道spring dude的情况,但我知道两次url编码都不起作用。你只需要一次编码json。
String json_to_url=URLEncoder.encode("{\"expiredAt\":{\"$gte\":\"" + getCurrentDate() + "\"}}", "utf-8");

String serviceURL=context.getString(R.string.url) + "services/promotions?limit=10&where="+ json_to_url;