3

我想通过 spring 为 android 实现 GET 请求。我不知道应该如何将 json 放在 url 中。网址是:

context.getString(R.string.url) + "services/promotions?limit=10&where={expiredAt:{$gte: \""+getCurrentDate()+"\"}}";我想设置但请求失败并在 logcat 上收到此错误:

Syntax error in regexp pattern near index \Qhttp://baas.papata.ir/services/promotions?limit=1&where=\E({$gte: "2014-05-05T14:48:20Z")\Q}\^

问题是什么?

更新:我使用该网址的课程是:

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());
} 
}
4

1 回答 1

4

您需要将 json 编码为 URL,然后与服务 URL 连接。您还需要用".

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;

更好的方法是使用POST提交数据GET

于 2014-05-05T15:21:50.167 回答