java与C#之间服务互相调用

26 篇文章 0 订阅
11 篇文章 1 订阅

一:C#调用java服务代码:

调用方法:这里的M205RegistComment对象 是自定义的,就是跟返回的json序列化的对象保持一致就ok,

注意date时间需要转换为string 并且格式需要跟api一致,

http://172.16.5.32/api/website/topic/available/get 就是 java里面的API接口访问地址。

string param1 = JsonConvert.SerializeObject(new { member_no = cardNo, date = dateString });
         
             WebApiInvokeHelper.PostResponse<M205RegistComment>("http://172.16.5.32/api/website/topic/available/get", param1);


静态方法:用的是HttpContent 调用方法

   public static T PostResponse<T>(string url, string postData, string contentType = "application/json") where T : class, new()
        {
            T result = default(T);

            HttpContent httpContent = new StringContent(postData);
            httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
            httpContent.Headers.ContentType.CharSet = "utf-8";
            using (HttpClient httpClient = new HttpClient())
            {
                HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

                if (response.IsSuccessStatusCode)
                {
                    Task<string> t = response.Content.ReadAsStringAsync();
                    string s = t.Result;
                    string json = JsonConvert.DeserializeObject(s).ToString();
                    result = JsonConvert.DeserializeObject<T>(json);

                    if (result == null)
                    {
                        AppLog.Write(string.Format("API接口名称:{0},序列化失败原因:{1}", url, result.ToString()), LogMessageType.Error);
                    }
                }
                else
                {
                    AppLog.Write(string.Format("API接口名称:{0},调用失败原因:{1}", url, response.RequestMessage.ToString()), LogMessageType.Error);
                }
            }
            return result;
        }

二:java调用C#的Api接口代码:

1:小在pom里面引用工具,

第一个是序列化工具 

第二个 http的工具类 也就是调用远程api的

第三个是加密的工具类

      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-http</artifactId>
            <version>5.3.8</version>
            <scope>compile</scope>
            <optional>true</optional>
        </dependency>
        <!--hutool 工具引入-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-crypto</artifactId>
            <version>5.3.10</version>
            <scope>compile</scope>
        </dependency>

2: 调用get方法,在 hutool里面有好多方法,

例如get请求方法 用 HttpUtil类就可以 。这里也可以自定义先对hutool的方法自己封装一下再调用,也可以直接调用。

这里面会可以写post方法,或者其他方法,都可以调用hutool的方法

package com.greentree.h5webapi.utils;

import cn.hutool.http.HttpUtil;
import java.util.Map;

/**
 * @Desc: http 请求帮助类
 * **
 * @Date: created in 16:11 2021/4/1
 */
public class HttpUtils {
    /**
     * get 请求
     *
     * @param url      请求url
     * @param paramMap 请求参数
     * @return {@link String} 请求返回的结果
     */
    public static String get(String url, Map<String, Object> paramMap) {
        return HttpUtil.get(url, paramMap);
    }
}

3:具体的方法调用,这里需要注意 config里面是配置的 调用的C#的API地址url,以及加密需要用到key ,这里做了一个安全验证,简单的签名。

 这是一个公用方法,所有的调用第三方的get方法 都可以先走该方法,这里用会员做了一个加密,然后api方法也用相同的key加密校验

然后用户编号 跟sign 添加到map 里面去。

调用hutool的 get方法 

 

    @Autowired
    private WebsiteConfig config;

    private OriginalRequest getHttpResult(String url, Map<String, Object> param, String userId) {
        if (param == null) {
            return new OriginalRequest( );
        }
        // userId 加密
        if (!StringUtils.IsEmpty(userId)){
            String sign = SecureUtils.encryptDES(userId, config.getSignKey( ));
            param.put("userId", userId);
            param.put("sign", sign);
        }
        String resStr = HttpUtils.get(config.websiteUrl(url), param);
        return JSONObject.parseObject(resStr, OriginalRequest.class);
    }

4:这里是具体的用户登录方法调用。

WebsiteApiConstant.CHECK_PAY_PASSWORD 是一个 api的具体控制器方法

map是参数 

userid是用户编号

    @Override
    public Boolean checkPassWord(String userId, String password) {
        Map<String, Object> map = new HashMap<>( );
        map.put("password", password);
        OriginalRequest res = getHttpResult(WebsiteApiConstant.CHECK_PAY_PASSWORD, map, userId);
        if (res != null && res.getResult( ) && res.getData( ) != null) {
            CheckPayPassword data = JSONObject.parseObject(res.getData( ), CheckPayPassword.class);
            if (data != null) {
                return data.getIsSuccess( );
            }
        }
        return false;
    }
 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值