Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fuyue82
o2oa
提交
a290fa12
o2oa
项目概览
fuyue82
/
o2oa
与 Fork 源项目一致
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
o2oa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a290fa12
编写于
4月 11, 2022
作者:
O
o2null
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
780827a2
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
68 addition
and
82 deletion
+68
-82
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/DingdingConsumeQueue.java
.../x/message/assemble/communicate/DingdingConsumeQueue.java
+43
-61
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/MPWeixinConsumeQueue.java
.../x/message/assemble/communicate/MPWeixinConsumeQueue.java
+5
-3
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/QiyeweixinConsumeQueue.java
.../message/assemble/communicate/QiyeweixinConsumeQueue.java
+20
-16
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/touch/TouchAction.java
...m/x/query/service/processing/jaxrs/touch/TouchAction.java
+0
-2
未找到文件。
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/DingdingConsumeQueue.java
浏览文件 @
a290fa12
...
...
@@ -4,12 +4,13 @@ import java.net.URLEncoder;
import
org.apache.commons.lang3.StringUtils
;
import
com.google.gson.Gson
;
import
com.google.gson.JsonObject
;
import
com.google.gson.JsonParser
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.config.Config
;
import
com.x.base.core.project.connection.HttpConnection
;
import
com.x.base.core.project.gson.XGsonBuilder
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.message.DingdingMessage
;
...
...
@@ -20,7 +21,9 @@ import com.x.message.core.entity.Message;
public
class
DingdingConsumeQueue
extends
AbstractQueue
<
Message
>
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
DingdingConsumeQueue
.
class
);
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
DingdingConsumeQueue
.
class
);
private
static
final
Gson
gson
=
XGsonBuilder
.
instance
();
protected
void
execute
(
Message
message
)
throws
Exception
{
...
...
@@ -31,32 +34,34 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
m
.
setAgent_id
(
Long
.
parseLong
(
Config
.
dingding
().
getAgentId
(),
10
));
m
.
setUserid_list
(
business
.
organization
().
person
().
getObject
(
message
.
getPerson
()).
getDingdingId
());
if
(
StringUtils
.
isEmpty
(
m
.
getUserid_list
()))
{
logger
.
info
(
"没有接收钉钉消息的人员。。。。。。。。。。。。。"
);
LOGGER
.
info
(
"没有接收钉钉消息的人员。。。。。。。。。。。。。"
);
return
;
}
if
(
needTransferLink
(
message
.
getType
()))
{
String
openUrl
=
""
;
// cms 文档
if
(
MessageConnector
.
TYPE_CMS_PUBLISH
.
equals
(
message
.
getType
())
||
MessageConnector
.
TYPE_CMS_PUBLISH_TO_CREATOR
.
equals
(
message
.
getType
()))
{
if
(
MessageConnector
.
TYPE_CMS_PUBLISH
.
equals
(
message
.
getType
())
||
MessageConnector
.
TYPE_CMS_PUBLISH_TO_CREATOR
.
equals
(
message
.
getType
()))
{
openUrl
=
getDingdingOpenCMSDocumentUrl
(
message
.
getBody
());
}
else
{
// 流程工作相关的
openUrl
=
getDingdingOpenWorkUrl
(
message
.
getBody
());
}
if
(
StringUtils
.
isNotEmpty
(
openUrl
))
{
logger
.
debug
(
"openUrl: "
+
openUrl
);
LOGGER
.
debug
(
"openUrl: "
+
openUrl
);
// dingtalk://dingtalkclient/action/openapp?corpid=免登企业corpId&container_type=work_platform&app_id=0_{应用agentid}&redirect_type=jump&redirect_url=跳转url
String
dingtalkUrl
=
"dingtalk://dingtalkclient/action/openapp?corpid="
+
Config
.
dingding
().
getCorpId
()
+
"&container_type=work_platform&app_id=0_"
+
Config
.
dingding
().
getAgentId
()
+
"&redirect_type=jump&redirect_url="
+
URLEncoder
.
encode
(
openUrl
,
DefaultCharset
.
name
);
logger
.
info
(
"钉钉pc 打开消息 url:"
+
dingtalkUrl
);
String
dingtalkUrl
=
"dingtalk://dingtalkclient/action/openapp?corpid="
+
Config
.
dingding
().
getCorpId
()
+
"&container_type=work_platform&app_id=0_"
+
Config
.
dingding
().
getAgentId
()
+
"&redirect_type=jump&redirect_url="
+
URLEncoder
.
encode
(
openUrl
,
DefaultCharset
.
name
);
LOGGER
.
info
(
"钉钉pc 打开消息 url:"
+
dingtalkUrl
);
m
.
getMsg
().
setMsgtype
(
"markdown"
);
m
.
getMsg
().
getMarkdown
().
setTitle
(
message
.
getTitle
());
m
.
getMsg
().
getMarkdown
().
setText
(
"["
+
message
.
getTitle
()+
"]("
+
dingtalkUrl
+
")"
);
}
else
{
m
.
getMsg
().
getMarkdown
().
setText
(
"["
+
message
.
getTitle
()
+
"]("
+
dingtalkUrl
+
")"
);
}
else
{
m
.
getMsg
().
getText
().
setContent
(
message
.
getTitle
());
}
}
else
{
}
else
{
m
.
getMsg
().
getText
().
setContent
(
message
.
getTitle
());
}
...
...
@@ -64,13 +69,13 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
String
address
=
Config
.
dingding
().
getOapiAddress
()
+
"/topapi/message/corpconversation/asyncsend_v2?access_token="
+
Config
.
dingding
().
corpAccessToken
();
logger
.
debug
(
"钉钉发送消息url:"
+
address
);
logger
.
debug
(
"钉钉消息体:"
+
m
.
toString
());
LOGGER
.
debug
(
"钉钉发送消息url:"
+
address
);
LOGGER
.
debug
(
"钉钉消息体:"
+
m
.
toString
());
DingdingMessageResp
resp
=
HttpConnection
.
postAsObject
(
address
,
null
,
m
.
toString
(),
DingdingMessageResp
.
class
);
if
(
resp
.
getErrcode
()
!=
0
)
{
ExceptionDingdingMessage
e
=
new
ExceptionDingdingMessage
(
resp
.
getErrcode
(),
resp
.
getErrmsg
());
logger
.
error
(
e
);
LOGGER
.
error
(
e
);
}
else
{
Message
messageEntityObject
=
emc
.
find
(
message
.
getId
(),
Message
.
class
);
if
(
null
!=
messageEntityObject
)
{
...
...
@@ -85,6 +90,7 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
/**
* 文档打开的url
*
* @param messageBody
* @return
*/
...
...
@@ -102,16 +108,17 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
}
else
{
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
openPage
;
}
logger
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
LOGGER
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
return
o2oaUrl
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* 工作打开的url
*
* @param messageBody
* @return
*/
...
...
@@ -129,20 +136,18 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
// 2021-11-1 钉钉那边无法使用了 不能进行encode 否则签名不通过
// portal = URLEncoder.encode(portal, DefaultCharset.name);
workUrl
+=
"&redirectlink="
+
portal
;
}
// 2021-11-1 钉钉那边无法使用了 不能进行encode 否则签名不通过
// workUrl = URLEncoder.encode(workUrl, DefaultCharset.name);
logger
.
debug
(
"o2oa workUrl:"
+
workUrl
);
LOGGER
.
debug
(
"o2oa workUrl:"
+
workUrl
);
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
workUrl
;
}
else
{
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
openPage
;
}
logger
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
LOGGER
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
return
o2oaUrl
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
null
;
...
...
@@ -150,12 +155,13 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
/**
* 获取workid or workCompleted
*
* @param messageBody
* @return
*/
private
String
getWorkIdFromBody
(
String
messageBody
)
{
try
{
JsonObject
object
=
new
JsonParser
().
parse
(
messageBody
).
getAsJsonObject
(
);
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"work"
)
!=
null
)
{
return
object
.
get
(
"work"
).
getAsString
();
}
...
...
@@ -163,50 +169,52 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
return
object
.
get
(
"workCompleted"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* 这个执行的前提是 MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType()) || MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType()) cms的消息
* 这个执行的前提是 MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType()) ||
* MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType()) cms的消息
* body获取文档id
*
* @param messageBody
* @return
*/
private
String
getCmsDocumentId
(
String
messageBody
)
{
try
{
JsonObject
object
=
new
JsonParser
().
parse
(
messageBody
).
getAsJsonObject
(
);
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"id"
)
!=
null
)
{
return
object
.
get
(
"id"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* body里面是否有 openPageUrl 这个字段 有就用这个字段作为跳转页面
*
* @param messageBody
* @return
*/
private
String
getOpenPageUrl
(
String
messageBody
)
{
try
{
JsonObject
object
=
new
JsonParser
().
parse
(
messageBody
).
getAsJsonObject
(
);
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"openPageUrl"
)
!=
null
)
{
return
object
.
get
(
"openPageUrl"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* 是否需要把钉钉消息转成markdown格式消息
*
根据是否配置了钉钉工作链接、是否是工作消息(目前只支持工作消息)
* 是否需要把钉钉消息转成markdown格式消息
根据是否配置了钉钉工作链接、是否是工作消息(目前只支持工作消息)
*
* @param messageType 消息类型 判断是否是工作消息
* @return
*/
...
...
@@ -217,37 +225,11 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
return
true
;
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
LOGGER
.
error
(
e
);
}
return
false
;
}
// private List<String> workMessageTypeList() {
// List<String> list = new ArrayList<>();
// list.add(MessageConnector.TYPE_WORK_TO_WORKCOMPLETED);
// list.add(MessageConnector.TYPE_WORK_CREATE);
// list.add(MessageConnector.TYPE_WORK_DELETE);
// list.add(MessageConnector.TYPE_WORKCOMPLETED_CREATE);
// list.add(MessageConnector.TYPE_WORKCOMPLETED_DELETE);
// list.add(MessageConnector.TYPE_TASK_TO_TASKCOMPLETED);
// list.add(MessageConnector.TYPE_TASK_CREATE);
// list.add(MessageConnector.TYPE_TASK_DELETE);
// list.add(MessageConnector.TYPE_TASK_URGE);
// list.add(MessageConnector.TYPE_TASK_EXPIRE);
// list.add(MessageConnector.TYPE_TASK_PRESS);
// list.add(MessageConnector.TYPE_TASKCOMPLETED_CREATE);
// list.add(MessageConnector.TYPE_TASKCOMPLETED_DELETE);
// list.add(MessageConnector.TYPE_READ_TO_READCOMPLETED);
// list.add(MessageConnector.TYPE_READ_CREATE);
// list.add(MessageConnector.TYPE_READ_DELETE);
// list.add(MessageConnector.TYPE_READCOMPLETED_CREATE);
// list.add(MessageConnector.TYPE_READCOMPLETED_DELETE);
// list.add(MessageConnector.TYPE_REVIEW_CREATE);
// list.add(MessageConnector.TYPE_REVIEW_DELETE);
//
// return list;
// }
public
static
class
DingdingMessageResp
{
private
Integer
errcode
;
...
...
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/MPWeixinConsumeQueue.java
浏览文件 @
a290fa12
...
...
@@ -7,8 +7,8 @@ import java.util.Map;
import
org.apache.commons.lang3.StringUtils
;
import
com.google.gson.Gson
;
import
com.google.gson.JsonObject
;
import
com.google.gson.JsonParser
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.config.Config
;
...
...
@@ -16,6 +16,7 @@ import com.x.base.core.project.config.MPweixin;
import
com.x.base.core.project.config.MPweixinMessageTemp
;
import
com.x.base.core.project.connection.HttpConnection
;
import
com.x.base.core.project.gson.GsonPropertyObject
;
import
com.x.base.core.project.gson.XGsonBuilder
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.queue.AbstractQueue
;
...
...
@@ -31,7 +32,8 @@ public class MPWeixinConsumeQueue extends AbstractQueue<Message> {
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
MPWeixinConsumeQueue
.
class
);
//
private
static
final
Gson
gson
=
XGsonBuilder
.
instance
();
// creatorPerson 创建人 activityName 当前节点 processName 流程名称 startTime 开始时间 title 标题
@Override
...
...
@@ -48,7 +50,7 @@ public class MPWeixinConsumeQueue extends AbstractQueue<Message> {
String
openId
=
person
.
getMpwxopenId
();
logger
.
info
(
"openId : "
+
openId
);
if
(
StringUtils
.
isNotEmpty
(
openId
))
{
JsonObject
object
=
new
JsonParser
().
parse
(
message
.
getBody
()).
getAsJsonObject
(
);
JsonObject
object
=
gson
.
fromJson
(
message
.
getBody
(),
JsonObject
.
class
);
Map
<
String
,
WeixinTempMessageFieldObj
>
data
=
new
HashMap
<>();
WeixinTempMessageFieldObj
wobj
=
new
WeixinTempMessageFieldObj
();
wobj
.
setValue
(
message
.
getTitle
());
...
...
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/QiyeweixinConsumeQueue.java
浏览文件 @
a290fa12
...
...
@@ -4,12 +4,14 @@ import java.net.URLEncoder;
import
org.apache.commons.lang3.StringUtils
;
import
com.google.gson.Gson
;
import
com.google.gson.JsonObject
;
import
com.google.gson.JsonParser
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.config.Config
;
import
com.x.base.core.project.connection.HttpConnection
;
import
com.x.base.core.project.gson.XGsonBuilder
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.message.QiyeweixinMessage
;
...
...
@@ -21,6 +23,8 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
QiyeweixinConsumeQueue
.
class
);
private
static
final
Gson
gson
=
XGsonBuilder
.
instance
();
protected
void
execute
(
Message
message
)
throws
Exception
{
if
(
Config
.
qiyeweixin
().
getEnable
()
&&
Config
.
qiyeweixin
().
getMessageEnable
())
{
...
...
@@ -33,11 +37,11 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
if
(
needTransferLink
(
message
.
getType
()))
{
String
workUrl
=
getQywxOpenWorkUrl
(
message
.
getBody
());
if
(
StringUtils
.
isNotEmpty
(
workUrl
))
{
content
=
"<a href=\""
+
workUrl
+
"\">"
+
message
.
getTitle
()
+
"</a>"
;
content
=
"<a href=\""
+
workUrl
+
"\">"
+
message
.
getTitle
()
+
"</a>"
;
}
}
m
.
getText
().
setContent
(
content
);
logger
.
info
(
"微信消息:"
+
m
.
toString
());
logger
.
info
(
"微信消息:"
+
m
.
toString
());
String
address
=
Config
.
qiyeweixin
().
getApiAddress
()
+
"/cgi-bin/message/send?access_token="
+
Config
.
qiyeweixin
().
corpAccessToken
();
QiyeweixinMessageResp
resp
=
HttpConnection
.
postAsObject
(
address
,
null
,
m
.
toString
(),
...
...
@@ -59,6 +63,7 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
/**
* 生成单点登录和打开工作的地址
*
* @param messageBody
* @return
*/
...
...
@@ -75,23 +80,21 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
String
workUrl
=
"workmobilewithaction.html?workid="
+
work
;
String
messageRedirectPortal
=
Config
.
qiyeweixin
().
getMessageRedirectPortal
();
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
portal
=
URLEncoder
.
encode
(
portal
,
DefaultCharset
.
name
);
workUrl
+=
"&redirectlink="
+
portal
;
}
workUrl
=
URLEncoder
.
encode
(
workUrl
,
DefaultCharset
.
name
);
o2oaUrl
=
o2oaUrl
+
"qiyeweixinsso.html?redirect="
+
workUrl
;
logger
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
o2oaUrl
=
o2oaUrl
+
"qiyeweixinsso.html?redirect="
+
workUrl
;
logger
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
o2oaUrl
=
URLEncoder
.
encode
(
o2oaUrl
,
DefaultCharset
.
name
);
logger
.
info
(
"encode url :"
+
o2oaUrl
);
String
url
=
"https://open.weixin.qq.com/connect/oauth2/authorize?appid="
+
corpId
+
"&response_type=code&scope=snsapi_base"
+
"&agentid="
+
agentId
+
"&redirect_uri="
+
o2oaUrl
+
"&#wechat_redirect"
;
logger
.
info
(
"final url :"
+
url
);
logger
.
info
(
"encode url :"
+
o2oaUrl
);
String
url
=
"https://open.weixin.qq.com/connect/oauth2/authorize?appid="
+
corpId
+
"&response_type=code&scope=snsapi_base"
+
"&agentid="
+
agentId
+
"&redirect_uri="
+
o2oaUrl
+
"&#wechat_redirect"
;
logger
.
info
(
"final url :"
+
url
);
return
url
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
...
...
@@ -100,12 +103,13 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
/**
* 获取workid
*
* @param messageBody
* @return
*/
private
String
getWorkIdFromBody
(
String
messageBody
)
{
try
{
JsonObject
object
=
new
JsonParser
().
parse
(
messageBody
).
getAsJsonObject
(
);
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"work"
)
!=
null
)
{
return
object
.
get
(
"work"
).
getAsString
();
}
...
...
@@ -119,8 +123,8 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
}
/**
* 是否需要把企业微信消息转成超链接消息
*
根据是否配置了企业微信应用链接、是否是工作消息(目前只支持工作消息)
* 是否需要把企业微信消息转成超链接消息
根据是否配置了企业微信应用链接、是否是工作消息(目前只支持工作消息)
*
* @param messageType 消息类型 判断是否是工作消息
* @return
*/
...
...
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/touch/TouchAction.java
浏览文件 @
a290fa12
...
...
@@ -3,7 +3,6 @@ package com.x.query.service.processing.jaxrs.touch;
import
javax.servlet.http.HttpServletRequest
;
import
javax.ws.rs.Consumes
;
import
javax.ws.rs.GET
;
import
javax.ws.rs.POST
;
import
javax.ws.rs.Path
;
import
javax.ws.rs.Produces
;
import
javax.ws.rs.container.AsyncResponse
;
...
...
@@ -11,7 +10,6 @@ import javax.ws.rs.container.Suspended;
import
javax.ws.rs.core.Context
;
import
javax.ws.rs.core.MediaType
;
import
com.google.gson.JsonElement
;
import
com.x.base.core.project.annotation.JaxrsDescribe
;
import
com.x.base.core.project.annotation.JaxrsMethodDescribe
;
import
com.x.base.core.project.http.ActionResult
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录