2014-01-07 32 views
0

我尝试登录到通过JSON/REST糖CRM与下面的代码:登录到糖CRM CE REST/JSON从Java

private String doLogin(String endpointUrl, String username, String password) { 
    Map payload = createLoginData(username, password); 
    String url = "http://{endpointUrl}"; 
    URI expanded = new UriTemplate(url).expand(endpointUrl); 

    try { 
     url = URLDecoder.decode(expanded.toString(), "UTF-8"); 

    } catch (Exception e) { 

     e.printStackTrace(); 
    } 

    String response = template.postForObject(url, payload, String.class); 
... } 

private Map createLoginData(String username, String password){ 

    Map<String, Object> user_auth = new HashMap<String, Object>(); 
    user_auth.put("user_name", username); 
    user_auth.put("password", password); 
    Gson gson = new Gson(); 
    Map<String, Object> input_data = new HashMap<String, Object>(); 
    Map<String, Object> rest_data = new HashMap<String, Object>(); 
    rest_data.put("user_auth", user_auth); 
    input_data.put("method", "login"); 
    input_data.put("input_type", "JSON"); 
    input_data.put("response_type", "JSON"); 
    input_data.put("rest_data", gson.toJson(rest_data)); 

return input_data; 

} 

但不是成功登录,服务器以String形式返回php-script(端点)的soruce代码。任何想法,我做错了什么?

+0

所以,那么你的问题涉及到不正当的Apache/PHP安装(?)。 –

+0

没有。主要问题是缺少错误消息。如果我使用Chromes DEV HTTP Client创建请求,则登录成功。 – user1145874

回答

0

下面的代码解决了这个问题:

HttpEntity request = createLoginRequest(username, password); 
String response = template.postForObject(url, request, String.class); 

private HttpEntity<MultiValueMap<String, String>> createLoginRequest(String username, String password){ 
    MultiValueMap<String, String> requestMap = new LinkedMultiValueMap<String, String>(); 
    requestMap.add("method", "login"); 
    requestMap.add("input_type", "JSON"); 
    requestMap.add("response_type", "JSON"); 
    Map<String, Object> user_auth = new HashMap<String, Object>(); 
    user_auth.put("user_name", username); 
    user_auth.put("password", password); 
    Map<String, Object> rest_data = new HashMap<String, Object>(); 
    rest_data.put("user_auth", user_auth); 
    Gson gson = new Gson(); 
    requestMap.add("rest_data", gson.toJson(rest_data)); 
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(requestMap, headers); 
    return request; 
}