1、在写用户管理-黑名单这个功能的时候微信返回的一直是{"errcode": 0,"errmsg": "ok"},可获取黑名单列表的时候就是没有用户。这个问题纠结了好久,换了好几种方法还是不行。最后发现原来微信的开发文档写错了,上面写的是openid_list,而下面写的是opened_list。所以一直没有拉黑成功,也怪我没有仔细看。。
2、还是用户管理,批量拉黑粉丝。把openIds传过来的时候,需要转成这个字符串{"opened_list":["OPENID1”,” OPENID2”]} ,可总是报No ObjectCodec defined for the generator, can only serialize simple wrapper type。原因就是获取jsonGenerator的方式,必须使用objectMapper.getJsonFactory().createJsonGenerator(stringWriter);这个方法才可以。但是jackson的最新版本这个方法已经停用了,只好谷歌了。终于找到了解决办法,附上链接地址。http://www.concretepage.com/forum/thread?qid=335
protected JsonGenerator getJsonGenerator(Writer writer) throws IOException {
JsonFactory jfactory = new JsonFactory();
JsonGenerator jsonGenerator = jfactory.createGenerator(writer);
jsonGenerator.setCodec(getObjectMapper());
return jsonGenerator;
}
public String encodeBatchSetBlackList(List<String> openIds)throws WeixinException, IOException {
try {
StringWriter writer = new StringWriter();
JsonGenerator jsonGenerator = getJsonGenerator(writer);
jsonGenerator.writeStartObject();//{
jsonGenerator.writeObjectField("openid_list", openIds);
jsonGenerator.writeEndObject();//}
jsonGenerator.close();
return writer.toString();
} catch (JsonGenerationException e) {
throw new WeixinException(ErrorCode.ENCODE_JSON_ERROR, e);
}
}
3、对于微信返回的JSON数据包,如果可以直接json转bean那最好,还有一些特殊的例如批量获取用户基本信息的json数据。可以先获取userList。然后再循环这个list,分别把objNode转为User,然后添加到listuser里面。
{
"user_info_list": [
{
"subscribe": 1,
"openid": "otvxTs4dckWG7imySrJd6jSi0CWE",
"nickname": "iWithery",
"sex": 1,
"language": "zh_CN",
"city": "Jieyang",
"province": "Guangdong",
"country": "China",
"headimgurl": "http://wx.qlogo.cn/mmopen/xbIQx1GRqdvyqkMMhEaGOX802l1CyqMJNgUzKP8MeAeHFicRDSnZH7FY4XB7p8XHXIf6uJA2SCun
TPicGKezDC4saKISzRj3nz/0",
"subscribe_time": 1434093047,
"unionid": "oR5GjjgEhCMJFyzaVZdrxZ2zRRF4",
"remark": "",
"groupid": 0,
"tagid_list":[128,2]
},
{
"subscribe": 0,
"openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg",
"unionid": "oR5GjjjrbqBZbrnPwwmSxFukE41U",
}
]
}
JsonNode jsonNode = getObjectMapper().readTree(json);
JsonNode userList = jsonNode.path("user_info_list");
List<User> listUser = new ArrayList<User>();
for(JsonNode objNode : userList){
listUser.add(getObjectMapper().readValue(objNode.toString(),User.class));
}