增加RestLocale功能
This commit is contained in:
@@ -273,10 +273,12 @@
|
|||||||
当Server为HTTP协议时, request节点才有效。
|
当Server为HTTP协议时, request节点才有效。
|
||||||
remoteaddr 节点: 替换请求方节点的IP地址, 通常请求方是由nginx等web静态服务器转发过的则需要配置该节点。
|
remoteaddr 节点: 替换请求方节点的IP地址, 通常请求方是由nginx等web静态服务器转发过的则需要配置该节点。
|
||||||
且value值只能是以request.headers.开头,表示从request.headers中获取对应的header值。
|
且value值只能是以request.headers.开头,表示从request.headers中获取对应的header值。
|
||||||
|
locale value值必须是request.headers.或request.parameters.开头。
|
||||||
例如下面例子获取request.getRemoteAddr()值,如果header存在X-RemoteAddress值则返回X-RemoteAddress值,不存在返回getRemoteAddress()。
|
例如下面例子获取request.getRemoteAddr()值,如果header存在X-RemoteAddress值则返回X-RemoteAddress值,不存在返回getRemoteAddress()。
|
||||||
-->
|
-->
|
||||||
<request>
|
<request>
|
||||||
<remoteaddr value="request.headers.X-RemoteAddress"/>
|
<remoteaddr value="request.headers.X-RemoteAddress"/>
|
||||||
|
<locale value="request.headers.locale" />
|
||||||
<rpc authenticator="org.redkale.net.http.HttpRpcAuthenticator的实现类"/>
|
<rpc authenticator="org.redkale.net.http.HttpRpcAuthenticator的实现类"/>
|
||||||
</request>
|
</request>
|
||||||
|
|
||||||
@@ -286,8 +288,8 @@
|
|||||||
contenttype: plain值为调用finish时的ContentType; 默认值: text/plain; charset=utf-8
|
contenttype: plain值为调用finish时的ContentType; 默认值: text/plain; charset=utf-8
|
||||||
json值为调用finishJson时的ContentType; 默认值: application/json; charset=utf-8
|
json值为调用finishJson时的ContentType; 默认值: application/json; charset=utf-8
|
||||||
defcookie 节点: 当response里输出的cookie没有指定domain 和path时,使用该节点的默认值。
|
defcookie 节点: 当response里输出的cookie没有指定domain 和path时,使用该节点的默认值。
|
||||||
如果addheader、setheader 的value值以request.parameters.开头则表示从request.parameters中获取对应的parameter值
|
addheader、setheader 的value值以request.parameters.开头则表示从request.parameters中获取对应的parameter值
|
||||||
如果addheader、setheader 的value值以request.headers.开头则表示从request.headers中获取对应的header值
|
addheader、setheader 的value值以request.headers.开头则表示从request.headers中获取对应的header值
|
||||||
例如下面例子是在Response输出header时添加两个header(一个addHeader, 一个setHeader)。
|
例如下面例子是在Response输出header时添加两个header(一个addHeader, 一个setHeader)。
|
||||||
options 节点: 设置了该节点且auto=true,当request的method=OPTIONS自动设置addheader、setheader并返回200状态码
|
options 节点: 设置了该节点且auto=true,当request的method=OPTIONS自动设置addheader、setheader并返回200状态码
|
||||||
date 节点: 设置了该节点且period有值(单位:毫秒);返回response会包含Date头信息,默认为period=0
|
date 节点: 设置了该节点且period有值(单位:毫秒);返回response会包含Date头信息,默认为period=0
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ public class HttpContext extends Context {
|
|||||||
|
|
||||||
protected final String remoteAddrHeader;
|
protected final String remoteAddrHeader;
|
||||||
|
|
||||||
|
protected final String localHeader;
|
||||||
|
|
||||||
|
protected final String localParameter;
|
||||||
|
|
||||||
protected final HttpRpcAuthenticator rpcAuthenticator;
|
protected final HttpRpcAuthenticator rpcAuthenticator;
|
||||||
|
|
||||||
protected final AnyValue rpcAuthenticatorConfig;
|
protected final AnyValue rpcAuthenticatorConfig;
|
||||||
@@ -40,6 +44,8 @@ public class HttpContext extends Context {
|
|||||||
public HttpContext(HttpContextConfig config) {
|
public HttpContext(HttpContextConfig config) {
|
||||||
super(config);
|
super(config);
|
||||||
this.remoteAddrHeader = config.remoteAddrHeader;
|
this.remoteAddrHeader = config.remoteAddrHeader;
|
||||||
|
this.localHeader = config.localHeader;
|
||||||
|
this.localParameter = config.localParameter;
|
||||||
this.rpcAuthenticator = config.rpcAuthenticator;
|
this.rpcAuthenticator = config.rpcAuthenticator;
|
||||||
this.rpcAuthenticatorConfig = config.rpcAuthenticatorConfig;
|
this.rpcAuthenticatorConfig = config.rpcAuthenticatorConfig;
|
||||||
random.setSeed(Math.abs(System.nanoTime()));
|
random.setSeed(Math.abs(System.nanoTime()));
|
||||||
@@ -190,6 +196,10 @@ public class HttpContext extends Context {
|
|||||||
|
|
||||||
public String remoteAddrHeader;
|
public String remoteAddrHeader;
|
||||||
|
|
||||||
|
public String localHeader;
|
||||||
|
|
||||||
|
public String localParameter;
|
||||||
|
|
||||||
public HttpRpcAuthenticator rpcAuthenticator;
|
public HttpRpcAuthenticator rpcAuthenticator;
|
||||||
|
|
||||||
public AnyValue rpcAuthenticatorConfig;
|
public AnyValue rpcAuthenticatorConfig;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
|||||||
/**
|
/**
|
||||||
* 配合 @HttpMapping 使用。
|
* 配合 @HttpMapping 使用。
|
||||||
* 用于对@HttpMapping方法中参数描述 <br>
|
* 用于对@HttpMapping方法中参数描述 <br>
|
||||||
* 从RestService生成过来的HttpMapping,标记为@RestUserid、@RestAddress的参数不会生成HttpParam
|
* 从RestService生成过来的HttpMapping,标记为@RestUserid、@RestAddress、@RestLocale的参数不会生成HttpParam
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* 详情见: https://redkale.org
|
* 详情见: https://redkale.org
|
||||||
|
|||||||
@@ -132,6 +132,8 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
|
|
||||||
protected String remoteAddr;
|
protected String remoteAddr;
|
||||||
|
|
||||||
|
protected String locale;
|
||||||
|
|
||||||
private String lastRequestURIString;
|
private String lastRequestURIString;
|
||||||
|
|
||||||
private byte[] lastRequestURIBytes;
|
private byte[] lastRequestURIBytes;
|
||||||
@@ -146,6 +148,10 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
|
|
||||||
private final String remoteAddrHeader;
|
private final String remoteAddrHeader;
|
||||||
|
|
||||||
|
private final String localHeader;
|
||||||
|
|
||||||
|
private final String localParameter;
|
||||||
|
|
||||||
final HttpRpcAuthenticator rpcAuthenticator;
|
final HttpRpcAuthenticator rpcAuthenticator;
|
||||||
|
|
||||||
HttpServlet.ActionEntry actionEntry; //仅供HttpServlet传递Entry使用
|
HttpServlet.ActionEntry actionEntry; //仅供HttpServlet传递Entry使用
|
||||||
@@ -158,6 +164,8 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
super(context);
|
super(context);
|
||||||
this.array = array;
|
this.array = array;
|
||||||
this.remoteAddrHeader = context.remoteAddrHeader;
|
this.remoteAddrHeader = context.remoteAddrHeader;
|
||||||
|
this.localHeader = context.localHeader;
|
||||||
|
this.localParameter = context.localParameter;
|
||||||
this.rpcAuthenticator = context.rpcAuthenticator;
|
this.rpcAuthenticator = context.rpcAuthenticator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,6 +174,8 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
super(context);
|
super(context);
|
||||||
this.array = new ByteArray();
|
this.array = new ByteArray();
|
||||||
this.remoteAddrHeader = null;
|
this.remoteAddrHeader = null;
|
||||||
|
this.localHeader = null;
|
||||||
|
this.localParameter = null;
|
||||||
this.rpcAuthenticator = null;
|
this.rpcAuthenticator = null;
|
||||||
if (req != null) initSimpleRequest(req, true);
|
if (req != null) initSimpleRequest(req, true);
|
||||||
}
|
}
|
||||||
@@ -185,6 +195,7 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
if (req.getCurrentUserid() != null) this.currentUserid = req.getCurrentUserid();
|
if (req.getCurrentUserid() != null) this.currentUserid = req.getCurrentUserid();
|
||||||
this.contentType = req.getContentType();
|
this.contentType = req.getContentType();
|
||||||
this.remoteAddr = req.getRemoteAddr();
|
this.remoteAddr = req.getRemoteAddr();
|
||||||
|
this.locale = req.getLocale();
|
||||||
if (needPath) {
|
if (needPath) {
|
||||||
this.requestURI = (req.getPath() == null || req.getPath().isEmpty()) ? req.getRequestURI() : (req.getPath() + req.getRequestURI());
|
this.requestURI = (req.getPath() == null || req.getPath().isEmpty()) ? req.getRequestURI() : (req.getPath() + req.getRequestURI());
|
||||||
} else {
|
} else {
|
||||||
@@ -214,6 +225,7 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
parseBody();
|
parseBody();
|
||||||
req.setParams(params.isEmpty() ? null : params);
|
req.setParams(params.isEmpty() ? null : params);
|
||||||
req.setRemoteAddr(getRemoteAddr());
|
req.setRemoteAddr(getRemoteAddr());
|
||||||
|
req.setLocale(getLocale());
|
||||||
req.setContentType(getContentType());
|
req.setContentType(getContentType());
|
||||||
req.setPath(prefix);
|
req.setPath(prefix);
|
||||||
String uri = this.requestURI;
|
String uri = this.requestURI;
|
||||||
@@ -1140,6 +1152,30 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
return this.remoteAddr;
|
return this.remoteAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取国际化Locale,值可以取之于header或parameter
|
||||||
|
*
|
||||||
|
* @return 国际化Locale
|
||||||
|
*/
|
||||||
|
public String getLocale() {
|
||||||
|
if (this.locale != null) return this.locale;
|
||||||
|
if (localHeader != null) {
|
||||||
|
String val = getHeader(localHeader);
|
||||||
|
if (val != null) {
|
||||||
|
this.locale = val;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (localParameter != null) {
|
||||||
|
String val = getParameter(localParameter);
|
||||||
|
if (val != null) {
|
||||||
|
this.locale = val;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.locale;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取请求内容指定的编码字符串
|
* 获取请求内容指定的编码字符串
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -334,6 +334,8 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
|
|||||||
String jsonContentType = null;
|
String jsonContentType = null;
|
||||||
HttpCookie defaultCookie = null;
|
HttpCookie defaultCookie = null;
|
||||||
String remoteAddrHeader = null;
|
String remoteAddrHeader = null;
|
||||||
|
String localHeader = null;
|
||||||
|
String localParameter = null;
|
||||||
AnyValue rpcAuthenticatorConfig = null;
|
AnyValue rpcAuthenticatorConfig = null;
|
||||||
|
|
||||||
if (config != null) {
|
if (config != null) {
|
||||||
@@ -349,6 +351,17 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
|
|||||||
remoteAddrHeader = null;
|
remoteAddrHeader = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AnyValue rlocale = reqs.getAnyValue("locale");
|
||||||
|
String vlocale = rlocale == null ? null : rlocale.getValue("value");
|
||||||
|
if (vlocale != null && !vlocale.isEmpty()) {
|
||||||
|
if (vlocale.startsWith("request.headers.")) {
|
||||||
|
localHeader = vlocale.substring("request.headers.".length());
|
||||||
|
} else if (vlocale.startsWith("request.parameters.")) {
|
||||||
|
localParameter = vlocale.substring("request.parameters.".length());
|
||||||
|
} else {
|
||||||
|
logger.log(Level.SEVERE, "request config locale.value not start with request.headers. or request.parameters. but " + vlocale);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AnyValue resps = config.getAnyValue("response");
|
AnyValue resps = config.getAnyValue("response");
|
||||||
@@ -471,6 +484,8 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
|
|||||||
final HttpContextConfig contextConfig = new HttpContextConfig();
|
final HttpContextConfig contextConfig = new HttpContextConfig();
|
||||||
initContextConfig(contextConfig);
|
initContextConfig(contextConfig);
|
||||||
contextConfig.remoteAddrHeader = addrHeader;
|
contextConfig.remoteAddrHeader = addrHeader;
|
||||||
|
contextConfig.localHeader = localHeader;
|
||||||
|
contextConfig.localParameter = localParameter;
|
||||||
contextConfig.rpcAuthenticatorConfig = rpcAuthenticatorConfig;
|
contextConfig.rpcAuthenticatorConfig = rpcAuthenticatorConfig;
|
||||||
if (rpcAuthenticatorConfig != null) {
|
if (rpcAuthenticatorConfig != null) {
|
||||||
String impl = rpcAuthenticatorConfig.getValue("authenticator", "").trim();
|
String impl = rpcAuthenticatorConfig.getValue("authenticator", "").trim();
|
||||||
|
|||||||
@@ -55,28 +55,32 @@ public class HttpSimpleRequest implements java.io.Serializable {
|
|||||||
protected String remoteAddr;
|
protected String remoteAddr;
|
||||||
|
|
||||||
@ConvertColumn(index = 8)
|
@ConvertColumn(index = 8)
|
||||||
|
@Comment("Locale国际化")
|
||||||
|
protected String locale;
|
||||||
|
|
||||||
|
@ConvertColumn(index = 9)
|
||||||
@Comment("会话ID")
|
@Comment("会话ID")
|
||||||
protected String sessionid;
|
protected String sessionid;
|
||||||
|
|
||||||
@ConvertColumn(index = 9)
|
@ConvertColumn(index = 10)
|
||||||
@Comment("Content-Type")
|
@Comment("Content-Type")
|
||||||
protected String contentType;
|
protected String contentType;
|
||||||
|
|
||||||
@ConvertColumn(index = 10)
|
@ConvertColumn(index = 11)
|
||||||
protected int hashid;
|
protected int hashid;
|
||||||
|
|
||||||
@ConvertColumn(index = 11) //@since 2.5.0 由int改成Serializable, 具体数据类型只能是int、long、String
|
@ConvertColumn(index = 12) //@since 2.5.0 由int改成Serializable, 具体数据类型只能是int、long、String
|
||||||
protected Serializable currentUserid;
|
protected Serializable currentUserid;
|
||||||
|
|
||||||
@ConvertColumn(index = 12)
|
@ConvertColumn(index = 13)
|
||||||
@Comment("http header信息")
|
@Comment("http header信息")
|
||||||
protected Map<String, String> headers;
|
protected Map<String, String> headers;
|
||||||
|
|
||||||
@ConvertColumn(index = 13)
|
@ConvertColumn(index = 14)
|
||||||
@Comment("参数信息")
|
@Comment("参数信息")
|
||||||
protected Map<String, String> params;
|
protected Map<String, String> params;
|
||||||
|
|
||||||
@ConvertColumn(index = 14)
|
@ConvertColumn(index = 15)
|
||||||
@Comment("http body信息")
|
@Comment("http body信息")
|
||||||
protected byte[] body; //对应HttpRequest.array
|
protected byte[] body; //对应HttpRequest.array
|
||||||
|
|
||||||
@@ -152,6 +156,11 @@ public class HttpSimpleRequest implements java.io.Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HttpSimpleRequest locale(String locale) {
|
||||||
|
this.locale = locale;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public HttpSimpleRequest sessionid(String sessionid) {
|
public HttpSimpleRequest sessionid(String sessionid) {
|
||||||
this.sessionid = sessionid;
|
this.sessionid = sessionid;
|
||||||
return this;
|
return this;
|
||||||
@@ -266,6 +275,11 @@ public class HttpSimpleRequest implements java.io.Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HttpSimpleRequest clearLocale() {
|
||||||
|
this.locale = null;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public HttpSimpleRequest clearSessionid() {
|
public HttpSimpleRequest clearSessionid() {
|
||||||
this.sessionid = null;
|
this.sessionid = null;
|
||||||
return this;
|
return this;
|
||||||
@@ -316,6 +330,14 @@ public class HttpSimpleRequest implements java.io.Serializable {
|
|||||||
this.remoteAddr = remoteAddr;
|
this.remoteAddr = remoteAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLocale() {
|
||||||
|
return locale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocale(String locale) {
|
||||||
|
this.locale = locale;
|
||||||
|
}
|
||||||
|
|
||||||
public int getHashid() {
|
public int getHashid() {
|
||||||
return hashid;
|
return hashid;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1022,6 +1022,7 @@ public final class Rest {
|
|||||||
Collections.sort(entrys);
|
Collections.sort(entrys);
|
||||||
}
|
}
|
||||||
{ //restConverts、typeRefs、mappingurlToMethod、restAttributes、bodyTypes赋值
|
{ //restConverts、typeRefs、mappingurlToMethod、restAttributes、bodyTypes赋值
|
||||||
|
final int headIndex = 10;
|
||||||
for (final MappingEntry entry : entrys) {
|
for (final MappingEntry entry : entrys) {
|
||||||
mappingurlToMethod.put(entry.mappingurl, entry.mappingMethod);
|
mappingurlToMethod.put(entry.mappingurl, entry.mappingMethod);
|
||||||
final Method method = entry.mappingMethod;
|
final Method method = entry.mappingMethod;
|
||||||
@@ -1059,6 +1060,10 @@ public final class Rest {
|
|||||||
if (annaddr != null) {
|
if (annaddr != null) {
|
||||||
comment = annaddr.comment();
|
comment = annaddr.comment();
|
||||||
}
|
}
|
||||||
|
RestLocale annlocale = param.getAnnotation(RestLocale.class);
|
||||||
|
if (annlocale != null) {
|
||||||
|
comment = annlocale.comment();
|
||||||
|
}
|
||||||
RestBody annbody = param.getAnnotation(RestBody.class);
|
RestBody annbody = param.getAnnotation(RestBody.class);
|
||||||
if (annbody != null) {
|
if (annbody != null) {
|
||||||
comment = annbody.comment();
|
comment = annbody.comment();
|
||||||
@@ -1099,10 +1104,10 @@ public final class Rest {
|
|||||||
} //n maybe is null
|
} //n maybe is null
|
||||||
|
|
||||||
java.lang.reflect.Type paramtype = TypeToken.getGenericType(param.getParameterizedType(), serviceType);
|
java.lang.reflect.Type paramtype = TypeToken.getGenericType(param.getParameterizedType(), serviceType);
|
||||||
paramlist.add(new Object[]{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie, annbody, annfile, annuri, userid, annheaders, annparams, paramtype});
|
paramlist.add(new Object[]{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annlocale, annhead, anncookie, annbody, annfile, annuri, userid, annheaders, annparams, paramtype});
|
||||||
}
|
}
|
||||||
for (Object[] ps : paramlist) { //{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie, annbody, annfile, annuri, annuserid, annheaders, annparams, paramtype}
|
for (Object[] ps : paramlist) { //{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annlocale, annhead, anncookie, annbody, annfile, annuri, annuserid, annheaders, annparams, paramtype}
|
||||||
final boolean isuserid = ((RestUserid) ps[14]) != null; //是否取userid
|
final boolean isuserid = ((RestUserid) ps[headIndex + 5]) != null; //是否取userid
|
||||||
if ((ps[1] != null && ps[1].toString().indexOf('&') >= 0) || isuserid) continue; //@RestUserid 不需要生成 @HttpParam
|
if ((ps[1] != null && ps[1].toString().indexOf('&') >= 0) || isuserid) continue; //@RestUserid 不需要生成 @HttpParam
|
||||||
if (((RestAddress) ps[8]) != null) continue; //@RestAddress 不需要生成 @HttpParam
|
if (((RestAddress) ps[8]) != null) continue; //@RestAddress 不需要生成 @HttpParam
|
||||||
java.lang.reflect.Type pgtype = TypeToken.getGenericType(((Parameter) ps[0]).getParameterizedType(), serviceType);
|
java.lang.reflect.Type pgtype = TypeToken.getGenericType(((Parameter) ps[0]).getParameterizedType(), serviceType);
|
||||||
@@ -1123,18 +1128,20 @@ public final class Rest {
|
|||||||
RestParam annpara = (RestParam) ps[6];
|
RestParam annpara = (RestParam) ps[6];
|
||||||
RestSessionid annsid = (RestSessionid) ps[7];
|
RestSessionid annsid = (RestSessionid) ps[7];
|
||||||
RestAddress annaddr = (RestAddress) ps[8];
|
RestAddress annaddr = (RestAddress) ps[8];
|
||||||
RestHeader annhead = (RestHeader) ps[9];
|
RestLocale annlocale = (RestLocale) ps[9];
|
||||||
RestCookie anncookie = (RestCookie) ps[10];
|
RestHeader annhead = (RestHeader) ps[headIndex];
|
||||||
RestBody annbody = (RestBody) ps[11];
|
RestCookie anncookie = (RestCookie) ps[headIndex + 1];
|
||||||
RestUploadFile annfile = (RestUploadFile) ps[12];
|
RestBody annbody = (RestBody) ps[headIndex + 2];
|
||||||
RestURI annuri = (RestURI) ps[13];
|
RestUploadFile annfile = (RestUploadFile) ps[headIndex + 3];
|
||||||
RestUserid annuserid = (RestUserid) ps[14];
|
RestURI annuri = (RestURI) ps[headIndex + 4];
|
||||||
RestHeaders annheaders = (RestHeaders) ps[15];
|
RestUserid annuserid = (RestUserid) ps[headIndex + 5];
|
||||||
RestParams annparams = (RestParams) ps[16];
|
RestHeaders annheaders = (RestHeaders) ps[headIndex + 6];
|
||||||
|
RestParams annparams = (RestParams) ps[headIndex + 7];
|
||||||
|
|
||||||
if (CompletionHandler.class.isAssignableFrom(ptype)) { //HttpResponse.createAsyncHandler() or HttpResponse.createAsyncHandler(Class)
|
if (CompletionHandler.class.isAssignableFrom(ptype)) { //HttpResponse.createAsyncHandler() or HttpResponse.createAsyncHandler(Class)
|
||||||
} else if (annsid != null) { //HttpRequest.getSessionid(true|false)
|
} else if (annsid != null) { //HttpRequest.getSessionid(true|false)
|
||||||
} else if (annaddr != null) { //HttpRequest.getRemoteAddr
|
} else if (annaddr != null) { //HttpRequest.getRemoteAddr
|
||||||
|
} else if (annlocale != null) { //HttpRequest.getLocale
|
||||||
} else if (annheaders != null) { //HttpRequest.getHeaders
|
} else if (annheaders != null) { //HttpRequest.getHeaders
|
||||||
} else if (annparams != null) { //HttpRequest.getParameters
|
} else if (annparams != null) { //HttpRequest.getParameters
|
||||||
} else if (annbody != null) { //HttpRequest.getBodyUTF8 / HttpRequest.getBody
|
} else if (annbody != null) { //HttpRequest.getBodyUTF8 / HttpRequest.getBody
|
||||||
@@ -1163,10 +1170,11 @@ public final class Rest {
|
|||||||
RestCookie rc = field.getAnnotation(RestCookie.class);
|
RestCookie rc = field.getAnnotation(RestCookie.class);
|
||||||
RestSessionid rs = field.getAnnotation(RestSessionid.class);
|
RestSessionid rs = field.getAnnotation(RestSessionid.class);
|
||||||
RestAddress ra = field.getAnnotation(RestAddress.class);
|
RestAddress ra = field.getAnnotation(RestAddress.class);
|
||||||
|
RestLocale rl = field.getAnnotation(RestLocale.class);
|
||||||
RestBody rb = field.getAnnotation(RestBody.class);
|
RestBody rb = field.getAnnotation(RestBody.class);
|
||||||
RestUploadFile ru = field.getAnnotation(RestUploadFile.class);
|
RestUploadFile ru = field.getAnnotation(RestUploadFile.class);
|
||||||
RestURI ri = field.getAnnotation(RestURI.class);
|
RestURI ri = field.getAnnotation(RestURI.class);
|
||||||
if (rh == null && rc == null && ra == null && rb == null && rs == null && ru == null && ri == null) continue;
|
if (rh == null && rc == null && ra == null && rl == null && rb == null && rs == null && ru == null && ri == null) continue;
|
||||||
|
|
||||||
org.redkale.util.Attribute attr = org.redkale.util.Attribute.create(loop, field);
|
org.redkale.util.Attribute attr = org.redkale.util.Attribute.create(loop, field);
|
||||||
String attrFieldName;
|
String attrFieldName;
|
||||||
@@ -1183,6 +1191,9 @@ public final class Rest {
|
|||||||
} else if (ra != null) {
|
} else if (ra != null) {
|
||||||
attrFieldName = "_redkale_attr_address_" + restAttributes.size();
|
attrFieldName = "_redkale_attr_address_" + restAttributes.size();
|
||||||
//restname = "";
|
//restname = "";
|
||||||
|
} else if (rl != null) {
|
||||||
|
attrFieldName = "_redkale_attr_locale_" + restAttributes.size();
|
||||||
|
//restname = "";
|
||||||
} else if (rb != null && field.getType() == String.class) {
|
} else if (rb != null && field.getType() == String.class) {
|
||||||
attrFieldName = "_redkale_attr_bodystring_" + restAttributes.size();
|
attrFieldName = "_redkale_attr_bodystring_" + restAttributes.size();
|
||||||
//restname = "";
|
//restname = "";
|
||||||
@@ -1228,6 +1239,7 @@ public final class Rest {
|
|||||||
} else if (en.getKey().contains("_cookie_")) {
|
} else if (en.getKey().contains("_cookie_")) {
|
||||||
} else if (en.getKey().contains("_sessionid_")) {
|
} else if (en.getKey().contains("_sessionid_")) {
|
||||||
} else if (en.getKey().contains("_address_")) {
|
} else if (en.getKey().contains("_address_")) {
|
||||||
|
} else if (en.getKey().contains("_locale_")) {
|
||||||
} else if (en.getKey().contains("_uri_")) {
|
} else if (en.getKey().contains("_uri_")) {
|
||||||
} else if (en.getKey().contains("_bodystring_")) {
|
} else if (en.getKey().contains("_bodystring_")) {
|
||||||
} else if (en.getKey().contains("_bodybytes_")) {
|
} else if (en.getKey().contains("_bodybytes_")) {
|
||||||
@@ -1614,12 +1626,23 @@ public final class Rest {
|
|||||||
comment = annaddr.comment();
|
comment = annaddr.comment();
|
||||||
required = false;
|
required = false;
|
||||||
}
|
}
|
||||||
|
RestLocale annlocale = param.getAnnotation(RestLocale.class);
|
||||||
|
if (annlocale != null) {
|
||||||
|
if (annhead != null) throw new RuntimeException("@RestLocale and @RestHeader cannot on the same Parameter in " + method);
|
||||||
|
if (anncookie != null) throw new RuntimeException("@RestLocale and @RestCookie cannot on the same Parameter in " + method);
|
||||||
|
if (annsid != null) throw new RuntimeException("@RestLocale and @RestSessionid cannot on the same Parameter in " + method);
|
||||||
|
if (annaddr != null) throw new RuntimeException("@RestLocale and @RestAddress cannot on the same Parameter in " + method);
|
||||||
|
if (ptype != String.class) throw new RuntimeException("@RestAddress must on String Parameter in " + method);
|
||||||
|
comment = annlocale.comment();
|
||||||
|
required = false;
|
||||||
|
}
|
||||||
RestBody annbody = param.getAnnotation(RestBody.class);
|
RestBody annbody = param.getAnnotation(RestBody.class);
|
||||||
if (annbody != null) {
|
if (annbody != null) {
|
||||||
if (annhead != null) throw new RuntimeException("@RestBody and @RestHeader cannot on the same Parameter in " + method);
|
if (annhead != null) throw new RuntimeException("@RestBody and @RestHeader cannot on the same Parameter in " + method);
|
||||||
if (anncookie != null) throw new RuntimeException("@RestBody and @RestCookie cannot on the same Parameter in " + method);
|
if (anncookie != null) throw new RuntimeException("@RestBody and @RestCookie cannot on the same Parameter in " + method);
|
||||||
if (annsid != null) throw new RuntimeException("@RestBody and @RestSessionid cannot on the same Parameter in " + method);
|
if (annsid != null) throw new RuntimeException("@RestBody and @RestSessionid cannot on the same Parameter in " + method);
|
||||||
if (annaddr != null) throw new RuntimeException("@RestBody and @RestAddress cannot on the same Parameter in " + method);
|
if (annaddr != null) throw new RuntimeException("@RestBody and @RestAddress cannot on the same Parameter in " + method);
|
||||||
|
if (annlocale != null) throw new RuntimeException("@RestBody and @RestLocale cannot on the same Parameter in " + method);
|
||||||
if (ptype.isPrimitive()) throw new RuntimeException("@RestBody cannot on primitive type Parameter in " + method);
|
if (ptype.isPrimitive()) throw new RuntimeException("@RestBody cannot on primitive type Parameter in " + method);
|
||||||
comment = annbody.comment();
|
comment = annbody.comment();
|
||||||
}
|
}
|
||||||
@@ -1632,6 +1655,7 @@ public final class Rest {
|
|||||||
if (anncookie != null) throw new RuntimeException("@RestUploadFile and @RestCookie cannot on the same Parameter in " + method);
|
if (anncookie != null) throw new RuntimeException("@RestUploadFile and @RestCookie cannot on the same Parameter in " + method);
|
||||||
if (annsid != null) throw new RuntimeException("@RestUploadFile and @RestSessionid cannot on the same Parameter in " + method);
|
if (annsid != null) throw new RuntimeException("@RestUploadFile and @RestSessionid cannot on the same Parameter in " + method);
|
||||||
if (annaddr != null) throw new RuntimeException("@RestUploadFile and @RestAddress cannot on the same Parameter in " + method);
|
if (annaddr != null) throw new RuntimeException("@RestUploadFile and @RestAddress cannot on the same Parameter in " + method);
|
||||||
|
if (annlocale != null) throw new RuntimeException("@RestUploadFile and @RestLocale cannot on the same Parameter in " + method);
|
||||||
if (annbody != null) throw new RuntimeException("@RestUploadFile and @RestBody cannot on the same Parameter in " + method);
|
if (annbody != null) throw new RuntimeException("@RestUploadFile and @RestBody cannot on the same Parameter in " + method);
|
||||||
if (ptype != byte[].class && ptype != File.class && ptype != File[].class) throw new RuntimeException("@RestUploadFile must on byte[] or File or File[] Parameter in " + method);
|
if (ptype != byte[].class && ptype != File.class && ptype != File[].class) throw new RuntimeException("@RestUploadFile must on byte[] or File or File[] Parameter in " + method);
|
||||||
comment = annfile.comment();
|
comment = annfile.comment();
|
||||||
@@ -1643,6 +1667,7 @@ public final class Rest {
|
|||||||
if (anncookie != null) throw new RuntimeException("@RestURI and @RestCookie cannot on the same Parameter in " + method);
|
if (anncookie != null) throw new RuntimeException("@RestURI and @RestCookie cannot on the same Parameter in " + method);
|
||||||
if (annsid != null) throw new RuntimeException("@RestURI and @RestSessionid cannot on the same Parameter in " + method);
|
if (annsid != null) throw new RuntimeException("@RestURI and @RestSessionid cannot on the same Parameter in " + method);
|
||||||
if (annaddr != null) throw new RuntimeException("@RestURI and @RestAddress cannot on the same Parameter in " + method);
|
if (annaddr != null) throw new RuntimeException("@RestURI and @RestAddress cannot on the same Parameter in " + method);
|
||||||
|
if (annlocale != null) throw new RuntimeException("@RestURI and @RestLocale cannot on the same Parameter in " + method);
|
||||||
if (annbody != null) throw new RuntimeException("@RestURI and @RestBody cannot on the same Parameter in " + method);
|
if (annbody != null) throw new RuntimeException("@RestURI and @RestBody cannot on the same Parameter in " + method);
|
||||||
if (annfile != null) throw new RuntimeException("@RestURI and @RestUploadFile cannot on the same Parameter in " + method);
|
if (annfile != null) throw new RuntimeException("@RestURI and @RestUploadFile cannot on the same Parameter in " + method);
|
||||||
if (ptype != String.class) throw new RuntimeException("@RestURI must on String Parameter in " + method);
|
if (ptype != String.class) throw new RuntimeException("@RestURI must on String Parameter in " + method);
|
||||||
@@ -1655,6 +1680,7 @@ public final class Rest {
|
|||||||
if (anncookie != null) throw new RuntimeException("@RestUserid and @RestCookie cannot on the same Parameter in " + method);
|
if (anncookie != null) throw new RuntimeException("@RestUserid and @RestCookie cannot on the same Parameter in " + method);
|
||||||
if (annsid != null) throw new RuntimeException("@RestUserid and @RestSessionid cannot on the same Parameter in " + method);
|
if (annsid != null) throw new RuntimeException("@RestUserid and @RestSessionid cannot on the same Parameter in " + method);
|
||||||
if (annaddr != null) throw new RuntimeException("@RestUserid and @RestAddress cannot on the same Parameter in " + method);
|
if (annaddr != null) throw new RuntimeException("@RestUserid and @RestAddress cannot on the same Parameter in " + method);
|
||||||
|
if (annlocale != null) throw new RuntimeException("@RestUserid and @RestLocale cannot on the same Parameter in " + method);
|
||||||
if (annbody != null) throw new RuntimeException("@RestUserid and @RestBody cannot on the same Parameter in " + method);
|
if (annbody != null) throw new RuntimeException("@RestUserid and @RestBody cannot on the same Parameter in " + method);
|
||||||
if (annfile != null) throw new RuntimeException("@RestUserid and @RestUploadFile cannot on the same Parameter in " + method);
|
if (annfile != null) throw new RuntimeException("@RestUserid and @RestUploadFile cannot on the same Parameter in " + method);
|
||||||
if (!ptype.isPrimitive() && !java.io.Serializable.class.isAssignableFrom(ptype)) throw new RuntimeException("@RestUserid must on java.io.Serializable Parameter in " + method);
|
if (!ptype.isPrimitive() && !java.io.Serializable.class.isAssignableFrom(ptype)) throw new RuntimeException("@RestUserid must on java.io.Serializable Parameter in " + method);
|
||||||
@@ -1668,6 +1694,7 @@ public final class Rest {
|
|||||||
if (anncookie != null) throw new RuntimeException("@RestHeaders and @RestCookie cannot on the same Parameter in " + method);
|
if (anncookie != null) throw new RuntimeException("@RestHeaders and @RestCookie cannot on the same Parameter in " + method);
|
||||||
if (annsid != null) throw new RuntimeException("@RestHeaders and @RestSessionid cannot on the same Parameter in " + method);
|
if (annsid != null) throw new RuntimeException("@RestHeaders and @RestSessionid cannot on the same Parameter in " + method);
|
||||||
if (annaddr != null) throw new RuntimeException("@RestHeaders and @RestAddress cannot on the same Parameter in " + method);
|
if (annaddr != null) throw new RuntimeException("@RestHeaders and @RestAddress cannot on the same Parameter in " + method);
|
||||||
|
if (annlocale != null) throw new RuntimeException("@RestHeaders and @RestLocale cannot on the same Parameter in " + method);
|
||||||
if (annbody != null) throw new RuntimeException("@RestHeaders and @RestBody cannot on the same Parameter in " + method);
|
if (annbody != null) throw new RuntimeException("@RestHeaders and @RestBody cannot on the same Parameter in " + method);
|
||||||
if (annfile != null) throw new RuntimeException("@RestHeaders and @RestUploadFile cannot on the same Parameter in " + method);
|
if (annfile != null) throw new RuntimeException("@RestHeaders and @RestUploadFile cannot on the same Parameter in " + method);
|
||||||
if (userid != null) throw new RuntimeException("@RestHeaders and @RestUserid cannot on the same Parameter in " + method);
|
if (userid != null) throw new RuntimeException("@RestHeaders and @RestUserid cannot on the same Parameter in " + method);
|
||||||
@@ -1681,6 +1708,7 @@ public final class Rest {
|
|||||||
if (anncookie != null) throw new RuntimeException("@RestParams and @RestCookie cannot on the same Parameter in " + method);
|
if (anncookie != null) throw new RuntimeException("@RestParams and @RestCookie cannot on the same Parameter in " + method);
|
||||||
if (annsid != null) throw new RuntimeException("@RestParams and @RestSessionid cannot on the same Parameter in " + method);
|
if (annsid != null) throw new RuntimeException("@RestParams and @RestSessionid cannot on the same Parameter in " + method);
|
||||||
if (annaddr != null) throw new RuntimeException("@RestParams and @RestAddress cannot on the same Parameter in " + method);
|
if (annaddr != null) throw new RuntimeException("@RestParams and @RestAddress cannot on the same Parameter in " + method);
|
||||||
|
if (annlocale != null) throw new RuntimeException("@RestParams and @RestLocale cannot on the same Parameter in " + method);
|
||||||
if (annbody != null) throw new RuntimeException("@RestParams and @RestBody cannot on the same Parameter in " + method);
|
if (annbody != null) throw new RuntimeException("@RestParams and @RestBody cannot on the same Parameter in " + method);
|
||||||
if (annfile != null) throw new RuntimeException("@RestParams and @RestUploadFile cannot on the same Parameter in " + method);
|
if (annfile != null) throw new RuntimeException("@RestParams and @RestUploadFile cannot on the same Parameter in " + method);
|
||||||
if (userid != null) throw new RuntimeException("@RestParams and @RestUserid cannot on the same Parameter in " + method);
|
if (userid != null) throw new RuntimeException("@RestParams and @RestUserid cannot on the same Parameter in " + method);
|
||||||
@@ -1705,7 +1733,7 @@ public final class Rest {
|
|||||||
throw new RuntimeException("Parameter " + param.getName() + " not found name by @RestParam in " + method);
|
throw new RuntimeException("Parameter " + param.getName() + " not found name by @RestParam in " + method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (annhead == null && anncookie == null && annsid == null && annaddr == null && annbody == null && annfile == null
|
if (annhead == null && anncookie == null && annsid == null && annaddr == null && annlocale == null && annbody == null && annfile == null
|
||||||
&& !ptype.isPrimitive() && ptype != String.class && ptype != Flipper.class && !CompletionHandler.class.isAssignableFrom(ptype)
|
&& !ptype.isPrimitive() && ptype != String.class && ptype != Flipper.class && !CompletionHandler.class.isAssignableFrom(ptype)
|
||||||
&& !ptype.getName().startsWith("java") && n.charAt(0) != '#' && !"&".equals(n)) { //判断Json对象是否包含@RestUploadFile
|
&& !ptype.getName().startsWith("java") && n.charAt(0) != '#' && !"&".equals(n)) { //判断Json对象是否包含@RestUploadFile
|
||||||
Class loop = ptype;
|
Class loop = ptype;
|
||||||
@@ -1723,7 +1751,7 @@ public final class Rest {
|
|||||||
} while ((loop = loop.getSuperclass()) != Object.class);
|
} while ((loop = loop.getSuperclass()) != Object.class);
|
||||||
}
|
}
|
||||||
java.lang.reflect.Type paramtype = TypeToken.getGenericType(param.getParameterizedType(), serviceType);
|
java.lang.reflect.Type paramtype = TypeToken.getGenericType(param.getParameterizedType(), serviceType);
|
||||||
paramlist.add(new Object[]{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie, annbody, annfile, annuri, userid, annheaders, annparams, paramtype});
|
paramlist.add(new Object[]{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annlocale, annhead, anncookie, annbody, annfile, annuri, userid, annheaders, annparams, paramtype});
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> mappingMap = new LinkedHashMap<>();
|
Map<String, Object> mappingMap = new LinkedHashMap<>();
|
||||||
@@ -1833,18 +1861,20 @@ public final class Rest {
|
|||||||
av1.visitEnd();
|
av1.visitEnd();
|
||||||
av0.visitEnd();
|
av0.visitEnd();
|
||||||
}
|
}
|
||||||
|
final int headIndex = 10;
|
||||||
{ // 设置 Annotation
|
{ // 设置 Annotation
|
||||||
av0 = mv.visitAnnotation(httpParamsDesc, true);
|
av0 = mv.visitAnnotation(httpParamsDesc, true);
|
||||||
AnnotationVisitor av1 = av0.visitArray("value");
|
AnnotationVisitor av1 = av0.visitArray("value");
|
||||||
//设置 HttpParam
|
//设置 HttpParam
|
||||||
for (Object[] ps : paramlist) { //{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie, annbody, annfile, annuri, annuserid, annheaders, annparams, paramtype}
|
for (Object[] ps : paramlist) { //{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annlocale, annhead, anncookie, annbody, annfile, annuri, annuserid, annheaders, annparams, paramtype}
|
||||||
String n = ps[1].toString();
|
String n = ps[1].toString();
|
||||||
final boolean isuserid = ((RestUserid) ps[14]) != null; //是否取userid
|
final boolean isuserid = ((RestUserid) ps[headIndex + 5]) != null; //是否取userid
|
||||||
if (n.indexOf('&') >= 0 || isuserid) continue; //@RestUserid 不需要生成 @HttpParam
|
if (n.indexOf('&') >= 0 || isuserid) continue; //@RestUserid 不需要生成 @HttpParam
|
||||||
if (((RestAddress) ps[8]) != null) continue; //@RestAddress 不需要生成 @HttpParam
|
if (((RestAddress) ps[8]) != null) continue; //@RestAddress 不需要生成 @HttpParam
|
||||||
final boolean ishead = ((RestHeader) ps[9]) != null; //是否取getHeader 而不是 getParameter
|
if (((RestLocale) ps[9]) != null) continue; //@RestLocale 不需要生成 @HttpParam
|
||||||
final boolean iscookie = ((RestCookie) ps[10]) != null; //是否取getCookie
|
final boolean ishead = ((RestHeader) ps[headIndex]) != null; //是否取getHeader 而不是 getParameter
|
||||||
final boolean isbody = ((RestBody) ps[11]) != null; //是否取getBody
|
final boolean iscookie = ((RestCookie) ps[headIndex + 1]) != null; //是否取getCookie
|
||||||
|
final boolean isbody = ((RestBody) ps[headIndex + 2]) != null; //是否取getBody
|
||||||
AnnotationVisitor av2 = av1.visitAnnotation(null, httpParamDesc);
|
AnnotationVisitor av2 = av1.visitAnnotation(null, httpParamDesc);
|
||||||
av2.visit("name", (String) ps[1]);
|
av2.visit("name", (String) ps[1]);
|
||||||
if (((Parameter) ps[0]).getAnnotation(Deprecated.class) != null) {
|
if (((Parameter) ps[0]).getAnnotation(Deprecated.class) != null) {
|
||||||
@@ -1863,13 +1893,13 @@ public final class Rest {
|
|||||||
av2.visit("radix", (Integer) ps[3]);
|
av2.visit("radix", (Integer) ps[3]);
|
||||||
if (ishead) {
|
if (ishead) {
|
||||||
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.HEADER.name());
|
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.HEADER.name());
|
||||||
av2.visit("example", ((RestHeader) ps[9]).example());
|
av2.visit("example", ((RestHeader) ps[headIndex]).example());
|
||||||
} else if (iscookie) {
|
} else if (iscookie) {
|
||||||
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.COOKIE.name());
|
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.COOKIE.name());
|
||||||
av2.visit("example", ((RestCookie) ps[10]).example());
|
av2.visit("example", ((RestCookie) ps[headIndex + 1]).example());
|
||||||
} else if (isbody) {
|
} else if (isbody) {
|
||||||
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.BODY.name());
|
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.BODY.name());
|
||||||
av2.visit("example", ((RestBody) ps[11]).example());
|
av2.visit("example", ((RestBody) ps[headIndex + 2]).example());
|
||||||
} else if (ps[6] != null) {
|
} else if (ps[6] != null) {
|
||||||
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.QUERY.name());
|
av2.visitEnum("style", sourcetypeDesc, HttpParam.HttpParameterStyle.QUERY.name());
|
||||||
av2.visit("example", ((RestParam) ps[6]).example());
|
av2.visit("example", ((RestParam) ps[6]).example());
|
||||||
@@ -1932,16 +1962,17 @@ public final class Rest {
|
|||||||
RestParam annpara = (RestParam) ps[6];
|
RestParam annpara = (RestParam) ps[6];
|
||||||
RestSessionid annsid = (RestSessionid) ps[7];
|
RestSessionid annsid = (RestSessionid) ps[7];
|
||||||
RestAddress annaddr = (RestAddress) ps[8];
|
RestAddress annaddr = (RestAddress) ps[8];
|
||||||
RestHeader annhead = (RestHeader) ps[9];
|
RestLocale annlocale = (RestLocale) ps[9];
|
||||||
RestCookie anncookie = (RestCookie) ps[10];
|
RestHeader annhead = (RestHeader) ps[headIndex];
|
||||||
RestBody annbody = (RestBody) ps[11];
|
RestCookie anncookie = (RestCookie) ps[headIndex + 1];
|
||||||
RestUploadFile annfile = (RestUploadFile) ps[12];
|
RestBody annbody = (RestBody) ps[headIndex + 2];
|
||||||
RestURI annuri = (RestURI) ps[13];
|
RestUploadFile annfile = (RestUploadFile) ps[headIndex + 3];
|
||||||
RestUserid userid = (RestUserid) ps[14];
|
RestURI annuri = (RestURI) ps[headIndex + 4];
|
||||||
RestHeaders annheaders = (RestHeaders) ps[15];
|
RestUserid userid = (RestUserid) ps[headIndex + 5];
|
||||||
RestParams annparams = (RestParams) ps[16];
|
RestHeaders annheaders = (RestHeaders) ps[headIndex + 6];
|
||||||
java.lang.reflect.Type pgentype = (java.lang.reflect.Type) ps[17];
|
RestParams annparams = (RestParams) ps[headIndex + 7];
|
||||||
if (dynsimple && (annsid != null || annaddr != null || annhead != null || anncookie != null || annfile != null || annheaders != null)) dynsimple = false;
|
java.lang.reflect.Type pgentype = (java.lang.reflect.Type) ps[headIndex + 8];
|
||||||
|
if (dynsimple && (annsid != null || annaddr != null || annlocale != null || annhead != null || anncookie != null || annfile != null || annheaders != null)) dynsimple = false;
|
||||||
|
|
||||||
final boolean ishead = annhead != null; //是否取getHeader 而不是 getParameter
|
final boolean ishead = annhead != null; //是否取getHeader 而不是 getParameter
|
||||||
final boolean iscookie = anncookie != null; //是否取getCookie
|
final boolean iscookie = anncookie != null; //是否取getCookie
|
||||||
@@ -1975,6 +2006,11 @@ public final class Rest {
|
|||||||
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getRemoteAddr", "()Ljava/lang/String;", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getRemoteAddr", "()Ljava/lang/String;", false);
|
||||||
mv.visitVarInsn(ASTORE, maxLocals);
|
mv.visitVarInsn(ASTORE, maxLocals);
|
||||||
varInsns.add(new int[]{ALOAD, maxLocals});
|
varInsns.add(new int[]{ALOAD, maxLocals});
|
||||||
|
} else if (annlocale != null) { //HttpRequest.getLocale
|
||||||
|
mv.visitVarInsn(ALOAD, 1);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getLocale", "()Ljava/lang/String;", false);
|
||||||
|
mv.visitVarInsn(ASTORE, maxLocals);
|
||||||
|
varInsns.add(new int[]{ALOAD, maxLocals});
|
||||||
} else if (annheaders != null) { //HttpRequest.getHeaders
|
} else if (annheaders != null) { //HttpRequest.getHeaders
|
||||||
mv.visitVarInsn(ALOAD, 1);
|
mv.visitVarInsn(ALOAD, 1);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getHeaders", "()Ljava/util/Map;", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getHeaders", "()Ljava/util/Map;", false);
|
||||||
@@ -2326,14 +2362,16 @@ public final class Rest {
|
|||||||
RestCookie rc = field.getAnnotation(RestCookie.class);
|
RestCookie rc = field.getAnnotation(RestCookie.class);
|
||||||
RestSessionid rs = field.getAnnotation(RestSessionid.class);
|
RestSessionid rs = field.getAnnotation(RestSessionid.class);
|
||||||
RestAddress ra = field.getAnnotation(RestAddress.class);
|
RestAddress ra = field.getAnnotation(RestAddress.class);
|
||||||
|
RestLocale rl = field.getAnnotation(RestLocale.class);
|
||||||
RestBody rb = field.getAnnotation(RestBody.class);
|
RestBody rb = field.getAnnotation(RestBody.class);
|
||||||
RestUploadFile ru = field.getAnnotation(RestUploadFile.class);
|
RestUploadFile ru = field.getAnnotation(RestUploadFile.class);
|
||||||
RestURI ri = field.getAnnotation(RestURI.class);
|
RestURI ri = field.getAnnotation(RestURI.class);
|
||||||
if (rh == null && rc == null && ra == null && rb == null && rs == null && ru == null && ri == null) continue;
|
if (rh == null && rc == null && ra == null && rl == null && rb == null && rs == null && ru == null && ri == null) continue;
|
||||||
if (rh != null && field.getType() != String.class && field.getType() != InetSocketAddress.class) throw new RuntimeException("@RestHeader must on String Field in " + field);
|
if (rh != null && field.getType() != String.class && field.getType() != InetSocketAddress.class) throw new RuntimeException("@RestHeader must on String Field in " + field);
|
||||||
if (rc != null && field.getType() != String.class) throw new RuntimeException("@RestCookie must on String Field in " + field);
|
if (rc != null && field.getType() != String.class) throw new RuntimeException("@RestCookie must on String Field in " + field);
|
||||||
if (rs != null && field.getType() != String.class) throw new RuntimeException("@RestSessionid must on String Field in " + field);
|
if (rs != null && field.getType() != String.class) throw new RuntimeException("@RestSessionid must on String Field in " + field);
|
||||||
if (ra != null && field.getType() != String.class) throw new RuntimeException("@RestAddress must on String Field in " + field);
|
if (ra != null && field.getType() != String.class) throw new RuntimeException("@RestAddress must on String Field in " + field);
|
||||||
|
if (rl != null && field.getType() != String.class) throw new RuntimeException("@RestLocale must on String Field in " + field);
|
||||||
if (rb != null && field.getType().isPrimitive()) throw new RuntimeException("@RestBody must on cannot on primitive type Field in " + field);
|
if (rb != null && field.getType().isPrimitive()) throw new RuntimeException("@RestBody must on cannot on primitive type Field in " + field);
|
||||||
if (ru != null && field.getType() != byte[].class && field.getType() != File.class && field.getType() != File[].class) {
|
if (ru != null && field.getType() != byte[].class && field.getType() != File.class && field.getType() != File[].class) {
|
||||||
throw new RuntimeException("@RestUploadFile must on byte[] or File or File[] Field in " + field);
|
throw new RuntimeException("@RestUploadFile must on byte[] or File or File[] Field in " + field);
|
||||||
@@ -2355,6 +2393,9 @@ public final class Rest {
|
|||||||
} else if (ra != null) {
|
} else if (ra != null) {
|
||||||
attrFieldName = "_redkale_attr_address_" + restAttributes.size();
|
attrFieldName = "_redkale_attr_address_" + restAttributes.size();
|
||||||
//restname = "";
|
//restname = "";
|
||||||
|
} else if (rl != null) {
|
||||||
|
attrFieldName = "_redkale_attr_locale_" + restAttributes.size();
|
||||||
|
//restname = "";
|
||||||
} else if (rb != null && field.getType() == String.class) {
|
} else if (rb != null && field.getType() == String.class) {
|
||||||
attrFieldName = "_redkale_attr_bodystring_" + restAttributes.size();
|
attrFieldName = "_redkale_attr_bodystring_" + restAttributes.size();
|
||||||
//restname = "";
|
//restname = "";
|
||||||
@@ -2385,7 +2426,7 @@ public final class Rest {
|
|||||||
}
|
}
|
||||||
} while ((loop = loop.getSuperclass()) != Object.class);
|
} while ((loop = loop.getSuperclass()) != Object.class);
|
||||||
|
|
||||||
if (!attrParaNames.isEmpty()) { //参数存在 RestHeader、RestCookie、RestSessionid、RestAddress、RestBody字段
|
if (!attrParaNames.isEmpty()) { //参数存在 RestHeader、RestCookie、RestSessionid、RestAddress、RestLocale、RestBody字段
|
||||||
mv.visitVarInsn(ALOAD, maxLocals); //加载JsonBean
|
mv.visitVarInsn(ALOAD, maxLocals); //加载JsonBean
|
||||||
Label lif = new Label();
|
Label lif = new Label();
|
||||||
mv.visitJumpInsn(IFNULL, lif); //if(bean != null) {
|
mv.visitJumpInsn(IFNULL, lif); //if(bean != null) {
|
||||||
@@ -2428,6 +2469,8 @@ public final class Rest {
|
|||||||
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getSessionid", "(Z)Ljava/lang/String;", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getSessionid", "(Z)Ljava/lang/String;", false);
|
||||||
} else if (en.getKey().contains("_address_")) {
|
} else if (en.getKey().contains("_address_")) {
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getRemoteAddr", "()Ljava/lang/String;", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getRemoteAddr", "()Ljava/lang/String;", false);
|
||||||
|
} else if (en.getKey().contains("_locale_")) {
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getLocale", "()Ljava/lang/String;", false);
|
||||||
} else if (en.getKey().contains("_uri_")) {
|
} else if (en.getKey().contains("_uri_")) {
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getRequestURI", "()Ljava/lang/String;", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "getRequestURI", "()Ljava/lang/String;", false);
|
||||||
} else if (en.getKey().contains("_bodystring_")) {
|
} else if (en.getKey().contains("_bodystring_")) {
|
||||||
|
|||||||
32
src/main/java/org/redkale/net/http/RestLocale.java
Normal file
32
src/main/java/org/redkale/net/http/RestLocale.java
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
*/
|
||||||
|
package org.redkale.net.http;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
import static java.lang.annotation.ElementType.*;
|
||||||
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 只能注解于Service类的方法的String参数或参数内的String字段
|
||||||
|
* <p>
|
||||||
|
* 用于获取HTTP请求端的IP地址 HttpRequest.getLocale
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* 详情见: https://redkale.org
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
* @since 2.7.0
|
||||||
|
*/
|
||||||
|
@Inherited
|
||||||
|
@Documented
|
||||||
|
@Target({PARAMETER, FIELD})
|
||||||
|
@Retention(RUNTIME)
|
||||||
|
public @interface RestLocale {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注描述, 对应@HttpParam.comment
|
||||||
|
*
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
String comment() default "";
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user