Java微信公眾平臺(tái)之群發(fā)接口(高級(jí)群發(fā))
再次吐槽下,微信素材管理和群發(fā)這塊文檔對(duì)Java很不友好,此文需要結(jié)合我前文和官方文檔。
測(cè)試號(hào)調(diào)試群發(fā)只需看是否群發(fā)消息是否能組裝成功,不需要看結(jié)果如何(反正不會(huì)發(fā)送成功的),因?yàn)槲⑿胚€沒(méi)開(kāi)放這個(gè)功能(估計(jì)也不會(huì)開(kāi)放的)。
一、群發(fā)說(shuō)明
在公眾平臺(tái)網(wǎng)站上,為訂閱號(hào)提供了每天一條的群發(fā)權(quán)限,為服務(wù)號(hào)提供每月(自然月)4條的群發(fā)權(quán)限。
1、對(duì)于認(rèn)證訂閱號(hào),群發(fā)接口每天可成功調(diào)用1次,此次群發(fā)可選擇發(fā)送給全部用戶或某個(gè)標(biāo)簽;
2、對(duì)于認(rèn)證服務(wù)號(hào)雖然開(kāi)發(fā)者使用高級(jí)群發(fā)接口的每日調(diào)用限制為100次,但是用戶每月只能接收4條,無(wú)論在公眾平臺(tái)網(wǎng)站上,還是使用接口群發(fā),用戶每月只能接收4條群發(fā)消息,多于4條的群發(fā)將對(duì)該用戶發(fā)送失敗;
3、開(kāi)發(fā)者可以主動(dòng)設(shè)置 clientmsgid 來(lái)避免重復(fù)推送。
4、群發(fā)接口每分鐘限制請(qǐng)求60次,超過(guò)限制的請(qǐng)求會(huì)被拒絕。
5、圖文消息正文中插入自己帳號(hào)和其他公眾號(hào)已群發(fā)文章鏈接的能力。
二、群發(fā)圖文消息過(guò)程
1、首先,預(yù)先將圖文消息中需要用到的圖片,使用上傳圖文消息內(nèi)圖片接口,上傳成功并獲得圖片 URL;參考前文的上傳圖文消息內(nèi)的圖片獲取URL方法
2、上傳圖文消息素材,需要用到圖片時(shí),請(qǐng)使用上一步獲取的圖片 URL;
3、使用對(duì)用戶標(biāo)簽的群發(fā),或?qū)?OpenID 列表的群發(fā),將圖文消息群發(fā)出去,群發(fā)時(shí)微信會(huì)進(jìn)行原創(chuàng)校驗(yàn),并返回群發(fā)操作結(jié)果;
4、在上述過(guò)程中,如果需要,還可以預(yù)覽圖文消息、查詢?nèi)喊l(fā)狀態(tài),或刪除已群發(fā)的消息等。
三、群發(fā)圖片、文本等其他消息類型的過(guò)程
1、如果是群發(fā)文本消息,則直接根據(jù)下面的接口說(shuō)明進(jìn)行群發(fā)即可;
2、如果是群發(fā)圖片、視頻等消息,則需要預(yù)先通過(guò)素材管理接口準(zhǔn)備好 mediaID。
四、is_to_all說(shuō)明
用于設(shè)定是否向全部用戶發(fā)送,值為true或false,選擇true該消息群發(fā)給所有用戶,選擇false可根據(jù)tag_id發(fā)送給指定群組的用戶。
五、兩種群發(fā)方式
根據(jù)標(biāo)簽進(jìn)行群發(fā),訂閱號(hào)與服務(wù)號(hào)必須通過(guò)認(rèn)證
接口:https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN
根據(jù)OpenID列表群發(fā),只適用于認(rèn)證后的服務(wù)號(hào)
接口:https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN
post數(shù)據(jù)可以是圖文消息、文本、語(yǔ)音/音頻、圖片、視頻、卡券消息(所有使用到media_id的地方,現(xiàn)在都可以使用素材管理中的永久素材media_id了)
1、圖文消息post數(shù)據(jù)中的media_id需要通過(guò)上傳圖文消息素材接口獲取(https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN)
這個(gè)跟素材管理里的新增永久圖文素材接口post數(shù)據(jù)一樣,只是接口不一樣、返回的json多了一個(gè)type和created_at,參考我前文的新增永久圖文素材方法
2、語(yǔ)音/音頻、圖片post數(shù)據(jù)中的media_id需要通過(guò)上傳下載多媒體文件接口獲得,參考我前文的新增臨時(shí)/永久素材方法
3、視頻post數(shù)據(jù)中的media_id最麻煩,先得通過(guò)上傳下載多媒體文件接口獲取到media_id(經(jīng)測(cè)試,永久的下一步報(bào)錯(cuò)提示無(wú)效media_id),然后再通過(guò)特別接口再獲取到一個(gè)media_id,這才是群發(fā)所需要的media_id
六、群發(fā)示例Controller
@RequestMapping("/sendByOpenid")
public MassMsgResult sendByOpenid() throws Exception {
// 根據(jù)OpenID列表群發(fā)圖文消息
String mediaPath1 = "C:/Users/phil/Pictures/image/8538572f61d7a94cf0b9fe0f290cdb28.jpg";
UploadMediasResult result1 = HttpReqUtil.uploadTempMedia("phil_token", "image", mediaPath1);
String mediaPath2 = "C:/Users/phil/Pictures/image/685977abgw1f8xqp46dgyj20qo0zktfi.jpg";
UploadMediasResult result2 = HttpReqUtil.uploadTempMedia("phil_token", "image", mediaPath2);
List<UploadNewsMedia> array = new ArrayList<>();
UploadNewsMedia entity1 = new UploadNewsMedia();
entity1.setAuthor("phil");
entity1.setContent("人生只有經(jīng)歷才會(huì)懂得,只有懂得才知道珍惜,一生中,總會(huì)有一個(gè)人讓你笑得最甜,也總會(huì)有一個(gè)人讓你痛得最深,忘記,是善待自己");
entity1.setContent_source_url("http://blog.csdn.net/phil_jing");
// entity1.setDigest("digest");
entity1.setShow_conver_pic(1);
entity1.setThumb_media_id(result1.getMedia_id());
entity1.setTitle("心靈雞湯");
array.add(entity1);
UploadNewsMedia entity2 = new UploadNewsMedia();
entity2.setAuthor("phil");
entity2.setContent("什么是幸福,幸福就是自己的一種愉快的心理狀態(tài)和感受。時(shí)時(shí)、事事都能使自己快樂(lè)的人才是最幸福的人。最快樂(lè)的人,就是最幸福的人。笑口常開(kāi)的人,是最幸福的。");
entity2.setContent_source_url("http://www.qq.com");
// entity2.setDigest("digest");
entity2.setShow_conver_pic(0);
entity2.setThumb_media_id(result2.getMedia_id());
entity2.setTitle(" 經(jīng)典語(yǔ)錄");
array.add(entity2);
UploadMediasResult ur = HttpReqUtil.uploadNewsMedia("phil_token", array);
List<String> openids = new ArrayList<>();
openids.add("ovHQ5v9-ZsHUcax_nTCQwiP-sBcg");
openids.add("ovHQ5v6CW3INkWUsCl3olODif0cc");
MassMsgResult result_news = wechatMsgService.sendMpnewsToOpenid("phil_token", openids,
ur.getMedia_id());
logger.debug(" send by openid msg {} " ,result_news.getErrmsg());
// 根據(jù)OpenID列表群發(fā)文字消息
MassMsgResult result_text = wechatMsgService.sendTextToOpenid("phil_token", openids,
"什么是幸福,幸福就是自己的一種愉快的心理狀態(tài)和感受。時(shí)時(shí)、事事都能使自己快樂(lè)的人才是最幸福的人。最快樂(lè)的人,就是最幸福的人。笑口常開(kāi)的人,是最幸福的");
logger.debug(" send by openid msg {} " ,result_text.getErrmsg());
return null;
}
七、部分用到的類和方法
群發(fā)方法
/**
* 根據(jù)標(biāo)簽進(jìn)行群發(fā)文本消息
* @param accessToken 授權(quán)token
* @param entity 圖文消息對(duì)象
* @return
*/
public MassMsgResult sendTextToTag(String accessToken, int tagId, String content){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> filterParams = new HashMap<>();
filterParams.put("is_to_all", false);
filterParams.put("tag_id", tagId);
Map<String, Object> textParams = new HashMap<>();
textParams.put("content", content);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("filter", filterParams);
dataParams.put("text", textParams);
dataParams.put("msgtype", "text");
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)標(biāo)簽進(jìn)行群發(fā)圖文消息
* @param accessToken 授權(quán)token
* @param tagId 標(biāo)簽
* @param mediaId uploadMedia方法獲得
* @return
*/
public MassMsgResult sendMpnewsToTag(String accessToken, int tagId, String mediaId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> filterParams = new HashMap<>();
filterParams.put("is_to_all", false);
filterParams.put("tag_id", tagId);
Map<String, Object> mpnewsParams = new HashMap<>();
mpnewsParams.put("media_id", mediaId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("filter", filterParams);
dataParams.put("mpnews", mpnewsParams);
dataParams.put("msgtype", "mpnews");
dataParams.put("send_ignore_reprint", 0);//不能省略
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)標(biāo)簽進(jìn)行群發(fā)圖片
* @param accessToken 授權(quán)token
* @param tagId 標(biāo)簽
* @param mediaId uploadMedia方法獲得
* @return
*/
public MassMsgResult sendImageToTag(String accessToken, int tagId, String mediaId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> filterParams = new HashMap<>();
filterParams.put("is_to_all", false);
filterParams.put("tag_id", tagId);
Map<String, Object> imageParams = new HashMap<>();
imageParams.put("media_id", mediaId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("filter", filterParams);
dataParams.put("image", imageParams);
dataParams.put("msgtype", "image");
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)標(biāo)簽進(jìn)行群發(fā)語(yǔ)音/音頻
* @param accessToken 授權(quán)token
* @param tagId 標(biāo)簽
* @param mediaId uploadMedia方法獲得
* @return
*/
public MassMsgResult sendVoiceToTag(String accessToken, int tagId, String mediaId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> filterParams = new HashMap<>();
filterParams.put("is_to_all", false);
filterParams.put("tag_id", tagId);
Map<String, Object> voiceParams = new HashMap<>();
voiceParams.put("media_id", mediaId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("filter", filterParams);
dataParams.put("voice", voiceParams);
dataParams.put("msgtype", "voice");
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)標(biāo)簽進(jìn)行群發(fā)視頻
* @param accessToken 授權(quán)token
* @param tagId 標(biāo)簽
* @param mediaId uploadMedia方法獲得
* @return
*/
public MassMsgResult sendVideoToTag(String accessToken, int tagId, String mediaId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> filterParams = new HashMap<>();
filterParams.put("is_to_all", false);
filterParams.put("tag_id", tagId);
Map<String, Object> mpvideoParams = new HashMap<>();
mpvideoParams.put("media_id", mediaId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("filter", filterParams);
dataParams.put("mpvideo", mpvideoParams);
dataParams.put("msgtype", "mpvideo");
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)標(biāo)簽進(jìn)行群發(fā)卡券
* @param accessToken 授權(quán)token
* @param tagId 標(biāo)簽
* @param card_id
* @return
*/
public MassMsgResult sendWxCardToTag(String accessToken, int tagId, String cardId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> filterParams = new HashMap<>();
filterParams.put("is_to_all", false);
filterParams.put("tag_id", tagId);
Map<String, Object> wxcardParams = new HashMap<>();
wxcardParams.put("card_id", cardId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("filter", filterParams);
dataParams.put("wxcard", wxcardParams);
dataParams.put("msgtype", "wxcard");
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)OpenId進(jìn)行群發(fā)圖文消息
* @param accessToken 授權(quán)token
* @param tagId 標(biāo)簽
* @param mediaId uploadMedia方法獲得
* @return
*/
public MassMsgResult sendMpnewsToOpenid(String accessToken, List<String> openids, String mediaId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> mpnewsParams = new HashMap<>();
mpnewsParams.put("media_id", mediaId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("touser", openids);
dataParams.put("mpnews", mpnewsParams);
dataParams.put("msgtype", "mpnews");
dataParams.put("send_ignore_reprint", 0);
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)OpenId進(jìn)行群發(fā)文本消息
* @param accessToken 授權(quán)token
* @param openids openid
* @param content
* @return
*/
public MassMsgResult sendTextToOpenid(String accessToken, List<String> openids, String content){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> textParams = new HashMap<>();
textParams.put("content", content);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("touser", openids);
dataParams.put("text", textParams);
dataParams.put("msgtype", "text");
String data = JsonUtil.toJsonString(dataParams);
System.out.println(data);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)OpenId進(jìn)行群發(fā)語(yǔ)音消息
* @param accessToken 授權(quán)token
* @param openids openid
* @param mediaId
* @return
*/
public MassMsgResult sendVocieToOpenid(String accessToken, List<String> openids, String mediaId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> voiceParams = new HashMap<>();
voiceParams.put("media_id", mediaId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("touser", openids);
dataParams.put("voice", voiceParams);
dataParams.put("msgtype", "voice");
String data = JsonUtil.toJsonString(dataParams);
System.out.println(data);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)OpenId進(jìn)行群發(fā)圖片消息
* @param accessToken 授權(quán)token
* @param openids openid
* @param mediaId
* @return
*/
public MassMsgResult sendImageToOpenid(String accessToken, List<String> openids, String mediaId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> imageParams = new HashMap<>();
imageParams.put("media_id", mediaId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("touser", openids);
dataParams.put("image", imageParams);
dataParams.put("msgtype", "image");
String data = JsonUtil.toJsonString(dataParams);
System.out.println(data);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)OpenId進(jìn)行群發(fā)視頻消息
* @param accessToken 授權(quán)token
* @param openids openid
* @param mpVideoMedia uploadMediaVideo方法獲得media
* @return
*/
public MassMsgResult sendVideoToOpenid(String accessToken, List<String> openids, MpVideoMedia mpVideoMedia){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("touser", openids);
dataParams.put("mpvideo", mpVideoMedia);
dataParams.put("msgtype", "mpvideo");
String data = JsonUtil.toJsonString(dataParams);
System.out.println(data);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根據(jù)OpenId進(jìn)行群發(fā)卡券消息
* @param accessToken 授權(quán)token
* @param openids openid
* @param mediaId
* @return
*/
public MassMsgResult sendWxcardToOpenid(String accessToken, List<String> openids, String cardId){
MassMsgResult result = null;
TreeMap<String, String> params = new TreeMap<>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
Map<String, Object> wxcardParams = new HashMap<>();
wxcardParams.put("card_id", cardId);
TreeMap<String,Object> dataParams = new TreeMap<>();
dataParams.put("touser", openids);
dataParams.put("wxcard", wxcardParams);
dataParams.put("msgtype", "wxcard");
String data = JsonUtil.toJsonString(dataParams);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
try {
result = JsonUtil.fromJsonString(json, MassMsgResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
視頻post數(shù)據(jù)bean
/**
* 視頻post數(shù)據(jù)bean
* @author phil
* @date 2017年9月20日
*
*/
public class MpVideoMedia {
private String media_id;
private String title;
private String description;
}
獲取群發(fā)視頻post中的media_id
/**
* 獲取群發(fā)視頻post中的media_id
*
* @param accessToken
* @param uploadVideo
* @return
*/
public static UploadMediasResult uploadMediaVideo(String accessToken, MpVideoMedia mpVideoMedia) {
UploadMediasResult result = null;
TreeMap<String, String> params = new TreeMap<String, String>();
params.put("access_token", accessToken);
// post 提交的參數(shù)
String data = JsonUtil.toJsonString(mpVideoMedia);
String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_VIDEO_MEDIA_URL,
params, data);
result = JsonUtil.fromJsonString(json, UploadMediasResult.class);
return result;
}
群發(fā)返回的結(jié)果
package com.phil.wechat.msg.model.resp;
import com.phil.wechat.base.result.ResultState;
/**
* 群發(fā)消息返回的結(jié)果
* 根據(jù)OpenID列表群發(fā)
* @author phil
* @date 2017年7月2日
*
*/
public class MassMsgResult extends ResultState{
private String type; //媒體文件類型,分別有圖片(image)、語(yǔ)音(voice)、視頻(video)和縮略圖(thumb),次數(shù)為news,即圖文消息
private String msg_id;
private String msg_data_id;
}
配置類
// 按分組進(jìn)行群發(fā) public static final String SEND_ALL_MASS_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall"; // 按照openid進(jìn)行群發(fā)消息(OpenID最少2個(gè),最多10000個(gè) 10000個(gè)) public static final String SEND_MASS_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/send"; //上傳圖文消息素材 public static final String UPLOAD_NEWS_MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; //獲取群發(fā)視頻post中的media_id public static final String UPLOAD_VIDEO_MEDIA_URL = " https://api.weixin.qq.com/cgi-bin/media/uploadvideo";
關(guān)于源碼,希望幫到了你
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Java實(shí)現(xiàn)的Dijkstra算法示例
這篇文章主要介紹了基于Java實(shí)現(xiàn)的Dijkstra算法示例,一個(gè)比較典型的算法示例,需要的朋友可以參考下2014-07-07
SpringBoot 在IDEA中實(shí)現(xiàn)熱部署步驟詳解(實(shí)用版)
java實(shí)現(xiàn)往hive 的map類型字段寫數(shù)據(jù)
Mybatis在sqlite中無(wú)法讀寫byte[]類問(wèn)題的解決辦法
java中extends與implements的區(qū)別淺談

