最近项目需要 java调用 .net 的webapi。
对于get来说很简单,但是post方法遇到了些问题,最后也是曲线救国。
先看代码
Java 代码
public static void main(String[] args) throws Exception {
//DoGet(String url)
String resultGet = DoGet("http://localhost:14248/api/Report/GetTest?parentid=40");
//DoPost(String url,List nvps)
List nvps = new ArrayList();
nvps.add(new BasicNameValuePair("parentid", "40"));
String resultPost = DoPost("http://localhost:14248/api/Report/PostTest",nvps);
//DoPost(String url, JSONObject template)
JSONObject template = new JSONObject();
template.put("data",data);
String json=HttpWebapi.DoPost(urlString,template);
//DoPost(String url, String json)
SysUser user=new SysUser();
user.setAccount(etAccount.getText().toString());
user.setPassword(etPwd.getText().toString());
ApiRequest request=new ApiRequest<>();
request.setData(user);
String data=JsonConvert.toJSON(request);
String json = HttpWebapi.DoPost(AppConfig.getUrl() + "api/user/login", data);
}
public static String DoGet(String url) throws Exception {
HttpGet httpGet = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse resp = client.execute(httpGet);
HttpEntity he = resp.getEntity();
String respContent = EntityUtils.toString(he, "UTF-8");
return respContent;
}
public static String DoPost(String url,List nvps) throws Exception {
HttpPost httpost = new HttpPost(url);
HttpClient client = new DefaultHttpClient();
httpost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
HttpResponse resp = client.execute(httpost);
HttpEntity he = resp.getEntity();
String respContent = EntityUtils.toString(he, "UTF-8");
return respContent;
}
public static String DoPost(String url, JSONObject template)throws Exception{
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
httpPost.setEntity(new StringEntity(template.toString(),"utf-8"));
HttpResponse resp = httpClient.execute(httpPost);
String respContent = EntityUtils.toString(resp.getEntity(), "UTF-8");
return respContent;
}
public static String DoPost(String url, String json) throws Exception{
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
httpPost.setEntity(new StringEntity(json,"utf-8"));
HttpResponse resp = httpClient.execute(httpPost);
String respContent = EntityUtils.toString(resp.getEntity(), "UTF-8");
return respContent;
}
C# WebApi
public static String DoGet(String url)
public static String DoPost(String url, List
//public static String DoGet(String url)
[HttpGet]
public dynamic GetTest(int parentId)
{
APIResult result = new APIResult();
result.Data = report.Get_SanJu_ReportSiteCount(parentId);
result.ResponseResult = true;
result.ResponseMsg = "success";
result.ResponseCode = HttpStatusCode.OK;
return result;
}
//public static String DoPost(String url, List nvps)
[HttpPost]
public dynamic PostTest()
{
//通过[FormBody]并不能从方法参数上获得parentId,所以直接从 Request.Form获取
int parentId = int.Parse(HttpContext.Current.Request.Form["parentId"]);
APIResult result = new APIResult();
result.Data = report.Get_SanJu_ReportDesulphurizationTypeByParentId(parentId);
result.ResponseResult = true;
result.ResponseMsg = "success";
result.ResponseCode = HttpStatusCode.OK;
return result;
}
Java WebApi
public static String DoPost(String url, JSONObject template)
//public static String DoPost(String url, JSONObject template)
@Data
public class ApiRequest {
private T data;
private Integer pageIndex = 1;
private Integer pageSize;
}
@RequestMapping(value = "test", method = RequestMethod.POST)
public ApiResult test(String test, @RequestBody ApiRequest requestVo) {
ApiResult r = new ApiResult();
r.setData(requestVo.getData());
r.setCodeToSuccessed();
return r;
}
public static String DoPost(String url, String json)
@RequestMapping(value = "login", method = RequestMethod.POST)
public ApiResult login(@RequestBody ApiRequest requestVo) {
ApiResult r = new ApiResult();
SysUser entity = requestVo.getData();
String source = requestVo.getSource();
String platformUUID = entity.getPlatformUUID();
SysUser u = service.getByAccount(entity.getAccount());
// 验证登录成功
if (u != null && u.getPassword().equals(MD5.md5(entity.getPassword()))) {
if(u.getIsValid()==1){
u.setPassword("");//把密码设置为空
r.setData(u);
r.setCodeToSuccessed();
}else {
r.setMessage("The account has been locked!");
}
}else{
r.setMessage("Account or password invalid!");
}
return r;
}
PS : 希望有人解决这个 [FormBody] parentId 这个形式的话,告知一下。