从Java使用REST/JSON登录到Sugar CRM CE
我尝试使用以下代码通过JSON/REST登录到sugar crm:从Java使用REST/JSON登录到Sugar CRM CE,java,json,rest,sugarcrm,resttemplate,Java,Json,Rest,Sugarcrm,Resttemplate,我尝试使用以下代码通过JSON/REST登录到sugar crm: private String doLogin(String endpointUrl, String username, String password) { Map payload = createLoginData(username, password); String url = "http://{endpointUrl}"; URI expanded = new UriTemplate(url).e
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);
... }
私有映射createLoginData(字符串用户名、字符串密码){
映射用户_auth=new HashMap();
用户授权放置(“用户名称”,用户名);
用户授权输入(“密码”,密码);
Gson Gson=新的Gson();
映射输入_data=newhashmap();
Map rest_data=new HashMap();
rest\u data.put(“user\u auth”,user\u auth);
输入数据。输入(“方法”,“登录”);
input_data.put(“input_type”,“JSON”);
input_data.put(“response_type”、“JSON”);
input_data.put(“rest_data”,gson.toJson(rest_data));
返回输入数据;
}
但是,服务器没有成功登录,而是以字符串形式返回php脚本(端点)的soruce代码。任何想法,我做错了什么?以下代码解决了问题:
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;
}
HttpEntity请求=createLoginRequest(用户名、密码);
String response=template.postForObject(url、请求、String.class);
私有HttpEntity createLoginRequest(字符串用户名、字符串密码){
MultiValueMap requestMap=新链接的MultiValueMap();
添加(“方法”、“登录”);
add(“input_type”,“JSON”);
add(“response_type”、“JSON”);
映射用户_auth=new HashMap();
用户授权放置(“用户名称”,用户名);
用户授权输入(“密码”,密码);
Map rest_data=new HashMap();
rest\u data.put(“user\u auth”,user\u auth);
Gson Gson=新的Gson();
add(“rest_数据”,gson.toJson(rest_数据));
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION\u FORM\u URLENCODED);
HttpEntity请求=新的HttpEntity(请求映射,标题);
返回请求;
}
那么您的问题与不正确的Apache(?)/PHP设置有关。否。主要问题是缺少错误消息。如果使用Chromes DEV HTTP客户端创建请求,则登录成功。
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;
}