java 调用 C# webapi
最近项目需要 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<NameValuePair> nvps) List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 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<SysUser> 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<NameValuePair> 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) [HttpGet] public dynamic GetTest(int parentId) { APIResult<dynamic> result = new APIResult<dynamic>(); 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<NameValuePair> nvps) [HttpPost] public dynamic PostTest() { //通过[FormBody]并不能从方法参数上获得parentId,所以直接从 Request.Form获取 int parentId = int.Parse(HttpContext.Current.Request.Form["parentId"]); APIResult<dynamic> result = new APIResult<dynamic>(); 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) @Data public class ApiRequest<T> { private T data; private Integer pageIndex = 1; private Integer pageSize; } @RequestMapping(value = "test", method = RequestMethod.POST) public ApiResult<String> test(String test, @RequestBody ApiRequest<String> requestVo) { ApiResult<String> r = new ApiResult<String>(); r.setData(requestVo.getData()); r.setCodeToSuccessed(); return r; }
//public static String DoPost(String url, String json) @RequestMapping(value = "login", method = RequestMethod.POST) public ApiResult<SysUser> login(@RequestBody ApiRequest<SysUser> requestVo) { ApiResult<SysUser> r = new ApiResult<SysUser>(); 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; }