TencentAd / marketing-api-java-sdk

腾讯广告API JAVA SDK
Apache License 2.0
32 stars 18 forks source link

GSON 出现 empty String #3

Open bigger-xu opened 3 years ago

bigger-xu commented 3 years ago

当角色是BM的时候,获取token请求成功,但是在json格式化异常 {"code":0,"message":"","data":{"authorizer_info":{"account_uin":"","account_id":14484593,"scope_list":["user_actions"],"wechat_account_id":"","account_role_type":"ACCOUNT_ROLE_TYPE_BUSINESS_MANAGER","account_type":"ACCOUNT_TYPE_BM","role_type":"ROLE_TYPE_ROOT"},"access_token":"8d51e087bf6f136c6a671e820aa9809c","refresh_token":"cb30bdd49ba32a000e68f9133e20d8c0","access_token_expires_in":86400,"refresh_token_expires_in":2592000}}

需要在com.tencent.ads.JSON 72行做一下对Stirng的处理

bigger-xu commented 3 years ago
public class IntTypeAdapter extends TypeAdapter<Number> {

        @Override
        public void write(JsonWriter out, Number value)
                throws IOException {
            out.value(value);
        }

        @Override
        public Number read(JsonReader in) throws IOException {
            if (in.peek() == JsonToken.NULL) {
                in.nextNull();
                return null;
            }
            try {
                String result = in.nextString();
                if ("".equals(result)) {
                    return null;
                }
                return Integer.parseInt(result);
            } catch (NumberFormatException e) {
                throw new JsonSyntaxException(e);
            }
        }
    }

    public class LongTypeAdapter extends TypeAdapter<Long> {

        @Override
        public void write(JsonWriter out, Long value) throws IOException {
            out.value(value);
        }

        @Override
        public Long read(JsonReader in) throws IOException {
            if (in.peek() == JsonToken.NULL) {
                in.nextNull();
                return null;
            }
            try {
                String result = in.nextString();
                if ("".equals(result)) {
                    return null;
                }
                return Long.valueOf(result);
            } catch (NumberFormatException e) {
                throw new JsonSyntaxException(e);
            }
        }
    }
public JSON() {
    gson =
            createGson()
                    .registerTypeAdapter(Date.class, dateTypeAdapter)
                    .registerTypeAdapter(java.sql.Date.class, sqlDateTypeAdapter)
                    .registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter)
                    .registerTypeAdapter(LocalDate.class, localDateTypeAdapter)
                    .registerTypeAdapter(byte[].class, byteArrayAdapter)
                    .registerTypeAdapter(int.class, intTypeAdapter)
                    .registerTypeAdapter(Integer.class, intTypeAdapter)
                    .registerTypeAdapter(Long.class, longTypeAdapter)
                    .create();
    }

添加long和integer的解析即可解决这问题,我无权限提交,开发者自己搞一下吧

rokaye commented 3 years ago

image 相同的问题,出现问题的接口 tencentAds.leadClues().leadCluesGet()

com.tencent.ads marketing-api-java-sdk 1.1.13
KylinHuang7 commented 3 years ago

@bigger-xu account_uin的问题是接口返回与定义的数据类型不匹配,我们已经修复了这个问题

KylinHuang7 commented 3 years ago

@rokaye lead_clues/get的问题,能否提供trace_id方便我们定位一下呢?

rokaye commented 3 years ago

@rokaye lead_clues/get的问题,能否提供trace_id方便我们定位一下呢?

很好复现的,线索接口返回的结果中有的字段应该是数值类型,但实际返回了空字符串; SDK 中 JSON.java 类型适配器没有对应的数值类型的转换适配器引起的错误

2021-01-26 13:40:03,947
--> POST https://api.e.qq.com/v1.3/lead_clues/get?access_token=&nonce=&timestamp= HTTP/1.1
Content-Type: application/json; charset=utf-8
Content-Length: 108
Accept: application/json
X-SDK-LANGUAGE: JAVA
User-Agent: Tencent Ads Marketing API SDK
X-SDK-LANGUAGE-VERSION: 1.8.0_221
X-SDK-VERSION: 1.1.13
X-SDK-OS: Mac OS X

{"account_id":***,"time_range":{"start_time":1611283337,"end_time":1611304937},"page":1,"page_size":100}
--> END POST (108-byte body)
<-- HTTP/1.1 200 OK (1990ms)
Date: Tue, 26 Jan 2021 05:40:40 GMT
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: nginx
X-TSA-Trace-Id: 5d7bdf6b7fec4f72138f6ab61300697e
X-RateLimit-Remaining: 99%,98%
OkHttp-Sent-Millis: 1611639638976
OkHttp-Received-Millis: 1611639640164

{"code":0,"message":"success","data":{"page_info":{"page":1,"page_size":100,"total_number":3,"total_page":1},"leads_info":[{"account_id":0,"leads_id":0,"agency_id":"0","agency_name":"测试","campaign_id":"","campaign_name":"","adgroup_id":"","adgroup_name":"","creative_id":"","creative_name":"","component_id":"","component_name":"","page_id":"","page_name":"","page_url":"","leads_type":"LEADS_TYPE_FORM","leads_source":"OFFLINE","leads_potential_score":"0","leads_follow_tag":"LEADS_FOLLOW_TAG_DEFAULT","leads_name":"测试","leads_telephone":"1341863","telephone_location":"\u5e7f\u4e1c-\u6df1\u5733","leads_area":"\u798f\u5efa\u53a6\u95e8","leads_email":"www@333.com","leads_qq":"789000","leads_wechat":"qqqq","leads_gender":"GENDER_TYPE_MALE","nationlity":"\u4e2d\u56fd","working_years":"3","age":"20","profession":"CEO","id_number":"","address":"\u601d\u660e\u533a","bundle":"","pos_type":0,"leads_create_time":"2021-01-22 14:20:14","leads_action_time":"2021-01-22 14:20:14","leads_tags":"","shop_name":"","shop_address":""}]},"message_cn":""}
<-- END HTTP (3236-byte body)
grmoney commented 3 years ago

@rokaye 升级到最新版本的SDK看下哈

rokaye commented 3 years ago

@rokaye 升级到最新版本的SDK看下哈

我试试这个最新版本
   <dependency>
       <groupId>com.tencent.ads</groupId>
       <artifactId>marketing-api-java-sdk</artifactId>
       <version>1.1.14</version>
   </dependency>
KylinHuang7 commented 3 years ago
5d7bdf6b7fec4f72138f6ab61300697e

这边看到campaign_id的返回数据结构跟文档定义不匹配 我们内部排查下这个问题