use of com.dtflys.forest.exceptions.ForestRuntimeException in project forest by dromara.
the class TestForestFastjsonConverter method testConvertToJavaError.
@Test
public void testConvertToJavaError() {
String badJsonText = "{\"a\":1";
ForestFastjsonConverter forestFastjsonConverter = new ForestFastjsonConverter();
boolean error = false;
try {
forestFastjsonConverter.convertToJavaObject(badJsonText, Map.class);
} catch (ForestRuntimeException e) {
error = true;
assertNotNull(e.getCause());
}
assertTrue(error);
error = true;
try {
forestFastjsonConverter.convertToJavaObject(badJsonText, new TypeReference<Map>() {
}.getType());
} catch (ForestRuntimeException e) {
error = true;
assertNotNull(e.getCause());
}
assertTrue(error);
error = true;
try {
forestFastjsonConverter.convertToJavaObject(badJsonText, new TypeReference<Map>() {
});
} catch (ForestRuntimeException e) {
error = true;
assertNotNull(e.getCause());
}
assertTrue(error);
}
use of com.dtflys.forest.exceptions.ForestRuntimeException in project forest by dromara.
the class TestForestJacksonConverter method testConvertToJavaError.
@Test
public void testConvertToJavaError() {
String jsonText = "{\"a\":1, ";
boolean error = false;
ForestJacksonConverter forestJacksonConverter = new ForestJacksonConverter();
try {
forestJacksonConverter.convertToJavaObject(jsonText, Map.class);
} catch (ForestRuntimeException e) {
error = true;
assertNotNull(e.getCause());
}
assertTrue(error);
error = false;
try {
forestJacksonConverter.convertToJavaObject(jsonText, mapper.constructType(Map.class));
} catch (ForestRuntimeException e) {
error = true;
assertNotNull(e.getCause());
}
assertTrue(error);
jsonText = "[1, 2,";
try {
forestJacksonConverter.convertToJavaObject(jsonText, List.class);
} catch (ForestRuntimeException e) {
error = true;
assertNotNull(e.getCause());
}
assertTrue(error);
jsonText = "[1, 2,";
try {
forestJacksonConverter.convertToJavaObject(jsonText, List.class, Integer.class);
} catch (ForestRuntimeException e) {
error = true;
assertNotNull(e.getCause());
}
assertTrue(error);
}
use of com.dtflys.forest.exceptions.ForestRuntimeException in project forest by dromara.
the class ForestMethod method processBaseProperties.
private void processBaseProperties() {
MetaRequest baseMetaRequest = interfaceProxyHandler.getBaseMetaRequest();
String baseUrl = baseMetaRequest.getUrl();
if (StringUtils.isNotBlank(baseUrl)) {
baseUrlTemplate = makeURLTemplate(BaseRequest.class, "baseUrl", baseUrl);
}
String baseContentEncoding = baseMetaRequest.getContentEncoding();
if (StringUtils.isNotBlank(baseContentEncoding)) {
baseEncodeTemplate = makeTemplate(BaseRequest.class, "contentEncoding", baseContentEncoding);
}
String baseContentType = baseMetaRequest.getContentType();
if (StringUtils.isNotBlank(baseContentType)) {
baseContentTypeTemplate = makeTemplate(BaseRequest.class, "contentType", baseContentType);
}
String baseUserAgent = baseMetaRequest.getUserAgent();
if (StringUtils.isNotBlank(baseUserAgent)) {
baseUserAgentTemplate = makeTemplate(BaseRequest.class, "userAgent", baseUserAgent);
}
String baseCharset = baseMetaRequest.getCharset();
if (StringUtils.isNotBlank(baseCharset)) {
baseCharsetTemplate = makeTemplate(BaseRequest.class, "charset", baseCharset);
}
String baseSslProtocol = baseMetaRequest.getSslProtocol();
if (StringUtils.isNotBlank(baseSslProtocol)) {
baseSslProtocolTemplate = makeTemplate(BaseRequest.class, "sslProtocol", baseSslProtocol);
}
baseLogConfiguration = interfaceProxyHandler.getBaseLogConfiguration();
baseTimeout = baseMetaRequest.getTimeout();
baseConnectTimeout = baseMetaRequest.getConnectTimeout();
baseReadTimeout = baseMetaRequest.getReadTimeout();
baseRetryerClass = baseMetaRequest.getRetryer();
baseRetryCount = baseMetaRequest.getRetryCount();
baseMaxRetryInterval = baseMetaRequest.getMaxRetryInterval();
List<Class<? extends Interceptor>> globalInterceptorClasses = configuration.getInterceptors();
if (globalInterceptorClasses != null && globalInterceptorClasses.size() > 0) {
globalInterceptorList = new LinkedList<>();
for (Class clazz : globalInterceptorClasses) {
if (!Interceptor.class.isAssignableFrom(clazz) || clazz.isInterface()) {
throw new ForestRuntimeException("Class [" + clazz.getName() + "] is not a implement of [" + Interceptor.class.getName() + "] interface.");
}
Interceptor interceptor = interceptorFactory.getInterceptor(clazz);
globalInterceptorList.add(interceptor);
}
}
Class[] baseInterceptorClasses = baseMetaRequest.getInterceptor();
if (baseInterceptorClasses != null && baseInterceptorClasses.length > 0) {
baseInterceptorList = new LinkedList<>();
for (int cidx = 0, len = baseInterceptorClasses.length; cidx < len; cidx++) {
Class clazz = baseInterceptorClasses[cidx];
if (!Interceptor.class.isAssignableFrom(clazz) || clazz.isInterface()) {
throw new ForestRuntimeException("Class [" + clazz.getName() + "] is not a implement of [" + Interceptor.class.getName() + "] interface.");
}
Interceptor interceptor = interceptorFactory.getInterceptor(clazz);
baseInterceptorList.add(interceptor);
}
}
/*
List<Annotation> baseAnnotationList = interfaceProxyHandler.getBaseAnnotations();
List<ForestAnnotation> baseAnns = new LinkedList<>();
for (Annotation annotation : baseAnnotationList) {
Class interceptorClass = getAnnotationLifeCycleClass(annotation);
baseAnns.add(new ForestAnnotation(annotation, interceptorClass));
}
addMetaRequestAnnotations(baseAnns);
*/
}
use of com.dtflys.forest.exceptions.ForestRuntimeException in project forest by dromara.
the class ForestMethod method makeRequest.
/**
* 创建请求
* @param args 调用本对象对应方法时传入的参数数组
* @return Forest请求对象,{@link ForestRequest}类实例
*/
private ForestRequest makeRequest(Object[] args) {
MetaRequest baseMetaRequest = interfaceProxyHandler.getBaseMetaRequest();
ForestURL baseURL = null;
ForestQueryMap queries = new ForestQueryMap();
if (baseUrlTemplate != null) {
baseURL = baseUrlTemplate.render(args, queries);
}
if (urlTemplate == null) {
throw new ForestRuntimeException("request URL is empty");
}
ForestURL renderedURL = urlTemplate.render(args, queries);
ForestRequestType type = type(args);
String baseContentEncoding = null;
if (baseEncodeTemplate != null) {
baseContentEncoding = baseEncodeTemplate.render(args);
}
String contentEncoding = null;
if (encodeTemplate != null) {
contentEncoding = encodeTemplate.render(args);
}
String baseContentType = null;
if (baseContentTypeTemplate != null) {
baseContentType = baseContentTypeTemplate.render(args);
}
String baseUserAgent = null;
if (baseUserAgentTemplate != null) {
baseUserAgent = baseUserAgentTemplate.render(args);
}
String charset = null;
String renderedCharset = charsetTemplate.render(args);
if (StringUtils.isNotBlank(renderedCharset)) {
charset = renderedCharset;
} else if (baseCharsetTemplate != null) {
charset = baseCharsetTemplate.render(args);
} else if (StringUtils.isNotBlank(configuration.getCharset())) {
charset = configuration.getCharset();
}
String responseEncoding = null;
if (responseEncodingTemplate != null) {
responseEncoding = responseEncodingTemplate.render(args);
}
String sslProtocol = null;
String renderedSslProtocol = sslProtocolTemplate.render(args);
if (StringUtils.isNotBlank(renderedSslProtocol)) {
sslProtocol = renderedSslProtocol;
} else if (baseSslProtocolTemplate != null) {
sslProtocol = baseSslProtocolTemplate.render(args);
} else {
sslProtocol = configuration.getSslProtocol();
}
String renderedContentType = null;
if (contentTypeTemplate != null) {
renderedContentType = contentTypeTemplate.render(args).trim();
}
String renderedUserAgent = null;
if (userAgentTemplate != null) {
renderedUserAgent = userAgentTemplate.render(args).trim();
}
List<RequestNameValue> nameValueList = new ArrayList<>();
String[] headerArray = baseMetaRequest.getHeaders();
MappingTemplate[] baseHeaders = null;
if (headerArray != null && headerArray.length > 0) {
baseHeaders = new MappingTemplate[headerArray.length];
for (int j = 0; j < baseHeaders.length; j++) {
MappingTemplate header = new MappingTemplate(BaseRequest.class, "headers", this, headerArray[j], this, configuration.getProperties(), forestParameters);
baseHeaders[j] = header;
}
}
AddressSource addressSource = configuration.getBaseAddressSource();
ForestAddress address = configuration.getBaseAddress();
if (address == null) {
// 默认根地址
address = DEFAULT_ADDRESS;
}
ForestURL addressURL = null;
if (baseURL != null) {
renderedURL.setBaseURL(baseURL);
}
try {
addressURL = new ForestURL(new URL("http://localhost"));
addressURL.setBaseAddress(address);
renderedURL = renderedURL.mergeURLWith(addressURL);
} catch (MalformedURLException e) {
throw new ForestRuntimeException(e);
}
boolean autoRedirection = configuration.isAutoRedirection();
String bodyTypeName = "text";
if (bodyTypeTemplate != null) {
bodyTypeName = bodyTypeTemplate.render(args);
}
ForestDataType bodyType = ForestDataType.findByName(bodyTypeName);
// createExecutor and initialize http instance
ForestRequest<T> request = new ForestRequest(configuration, this, args);
request.url(renderedURL).type(type).bodyType(bodyType).addAllQuery(queries).charset(charset).autoRedirects(autoRedirection).setSslProtocol(sslProtocol).setLogConfiguration(logConfiguration).setAsync(async);
if (addressSource != null) {
address = addressSource.getAddress(request);
request.address(address);
}
if (StringUtils.isNotEmpty(responseEncoding)) {
request.setResponseEncode(responseEncoding);
}
if (StringUtils.isNotEmpty(renderedContentType)) {
request.setContentType(renderedContentType);
}
if (StringUtils.isNotEmpty(contentEncoding)) {
request.setContentEncoding(contentEncoding);
}
if (StringUtils.isNotEmpty(renderedUserAgent)) {
request.setUserAgent(renderedUserAgent);
}
for (int i = 0; i < namedParameters.size(); i++) {
MappingParameter parameter = namedParameters.get(i);
if (parameter.isObjectProperties()) {
int target = parameter.isUnknownTarget() ? type.getDefaultParamTarget() : parameter.getTarget();
Object obj = args[parameter.getIndex()];
if (obj == null && StringUtils.isNotEmpty(parameter.getDefaultValue())) {
obj = parameter.getConvertedDefaultValue(configuration.getJsonConverter());
}
if (parameter.isJsonParam()) {
String json = "";
if (obj != null) {
ForestJsonConverter jsonConverter = configuration.getJsonConverter();
obj = parameter.getFilterChain().doFilter(configuration, obj);
json = jsonConverter.encodeToString(obj);
}
if (MappingParameter.isHeader(target)) {
request.addHeader(new RequestNameValue(parameter.getJsonParamName(), json, target).setDefaultValue(parameter.getDefaultValue()));
} else {
nameValueList.add(new RequestNameValue(parameter.getJsonParamName(), json, target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
}
} else if (!parameter.getFilterChain().isEmpty()) {
obj = parameter.getFilterChain().doFilter(configuration, obj);
if (obj == null && StringUtils.isNotEmpty(parameter.getDefaultValue())) {
obj = parameter.getDefaultValue();
}
if (obj != null) {
if (MappingParameter.isHeader(target)) {
request.addHeader(new RequestNameValue(null, obj, target));
} else if (MappingParameter.isQuery(target)) {
request.addQuery(obj.toString(), (Object) null, parameter.isUrlEncode(), parameter.getCharset());
} else if (MappingParameter.isBody(target)) {
ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
request.addBody(body);
} else {
nameValueList.add(new RequestNameValue(obj.toString(), target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
}
}
} else if (obj instanceof CharSequence) {
if (MappingParameter.isQuery(target)) {
request.addQuery(ForestQueryParameter.createSimpleQueryParameter(obj).setDefaultValue(parameter.getDefaultValue()));
} else if (MappingParameter.isBody(target)) {
request.addBody(new StringRequestBody(obj.toString()).setDefaultValue(parameter.getDefaultValue()));
}
} else if (obj instanceof Map) {
Map map = (Map) obj;
if (MappingParameter.isQuery(target)) {
request.addQuery(map, parameter.isUrlEncode(), parameter.getCharset());
} else if (MappingParameter.isBody(target)) {
request.addBody(map, parameter.getPartContentType());
} else if (MappingParameter.isHeader(target)) {
request.addHeader(map);
}
} else if (obj instanceof Iterable || (obj != null && (obj.getClass().isArray() || ReflectUtils.isPrimaryType(obj.getClass())))) {
if (MappingParameter.isQuery(target)) {
if (parameter.isJsonParam()) {
request.addQuery(parameter.getName(), obj, parameter.isUrlEncode(), parameter.getCharset());
} else {
if (obj instanceof Iterable) {
for (Object subItem : (Iterable) obj) {
if (subItem instanceof ForestQueryParameter) {
request.addQuery((ForestQueryParameter) subItem);
} else {
request.addQuery(ForestQueryParameter.createSimpleQueryParameter(subItem));
}
}
} else if (obj.getClass().isArray()) {
if (obj instanceof ForestQueryParameter[]) {
request.addQuery((ForestQueryParameter[]) obj);
}
}
}
} else if (MappingParameter.isBody(target)) {
ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
request.addBody(body);
}
} else if (MappingParameter.isBody(target)) {
ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
request.addBody(body);
} else {
try {
List<RequestNameValue> list = getNameValueListFromObjectWithJSON(parameter, configuration, obj, type);
for (RequestNameValue nameValue : list) {
if (nameValue.isInHeader()) {
request.addHeader(nameValue);
} else {
nameValueList.add(nameValue);
}
}
} catch (Throwable th) {
throw new ForestRuntimeException(th);
}
}
} else if (parameter.getIndex() != null) {
int target = parameter.isUnknownTarget() ? type.getDefaultParamTarget() : parameter.getTarget();
RequestNameValue nameValue = new RequestNameValue(parameter.getName(), target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue());
Object obj = args[parameter.getIndex()];
if (obj == null && StringUtils.isNotEmpty(nameValue.getDefaultValue())) {
obj = parameter.getConvertedDefaultValue(configuration.getJsonConverter());
}
if (obj != null) {
if (MappingParameter.isQuery(target) && obj.getClass().isArray() && !(obj instanceof byte[]) && !(obj instanceof Byte[])) {
int len = Array.getLength(obj);
for (int idx = 0; idx < len; idx++) {
Object arrayItem = Array.get(obj, idx);
ForestQueryParameter queryParameter = new ForestQueryParameter(parameter.getName(), arrayItem, parameter.isUrlEncode(), parameter.getCharset());
request.addQuery(queryParameter);
}
} else {
nameValue.setValue(obj);
if (MappingParameter.isHeader(target)) {
request.addHeader(nameValue);
} else if (MappingParameter.isQuery(target)) {
if (!parameter.isJsonParam() && obj instanceof Iterable) {
int index = 0;
MappingTemplate template = makeTemplate(parameter);
VariableScope parentScope = template.getVariableScope();
for (Object subItem : (Iterable) obj) {
SubVariableScope scope = new SubVariableScope(parentScope);
scope.addVariableValue("_it", subItem);
scope.addVariableValue("_index", index++);
template.setVariableScope(scope);
String name = template.render(args);
request.addQuery(name, subItem, parameter.isUrlEncode(), parameter.getCharset());
}
} else if (parameter.isJsonParam()) {
request.addJSONQuery(parameter.getName(), obj);
} else {
request.addQuery(parameter.getName(), obj, parameter.isUrlEncode(), parameter.getCharset());
}
} else {
MappingTemplate template = makeTemplate(parameter);
if (obj instanceof Iterable && template.hasIterateVariable()) {
int index = 0;
VariableScope parentScope = template.getVariableScope();
for (Object subItem : (Iterable) obj) {
SubVariableScope scope = new SubVariableScope(parentScope);
template.setVariableScope(scope);
scope.addVariableValue("_it", subItem);
scope.addVariableValue("_index", index++);
String name = template.render(args);
nameValueList.add(new RequestNameValue(name, subItem, target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
}
} else {
nameValueList.add(nameValue);
}
}
}
}
}
}
if (request.getContentType() == null) {
if (StringUtils.isNotEmpty(baseContentType)) {
request.setContentType(baseContentType);
}
}
if (request.getContentEncoding() == null) {
if (StringUtils.isNotEmpty(baseContentEncoding)) {
request.setContentEncoding(baseContentEncoding);
}
}
if (request.getUserAgent() == null) {
if (StringUtils.isNotEmpty(baseUserAgent)) {
request.setUserAgent(baseUserAgent);
}
}
List<ForestMultipart> multiparts = new ArrayList<>(multipartFactories.size());
String contentType = request.getContentType();
if (!multipartFactories.isEmpty()) {
if (StringUtils.isBlank(contentType)) {
String boundary = StringUtils.generateBoundary();
request.setContentType(ContentType.MULTIPART_FORM_DATA + "; boundary=" + boundary);
} else if (ContentType.MULTIPART_FORM_DATA.equalsIgnoreCase(contentType) && request.getBoundary() == null) {
request.setBoundary(StringUtils.generateBoundary());
}
}
for (int i = 0; i < multipartFactories.size(); i++) {
ForestMultipartFactory factory = multipartFactories.get(i);
MappingTemplate nameTemplate = factory.getNameTemplate();
MappingTemplate fileNameTemplate = factory.getFileNameTemplate();
int index = factory.getIndex();
Object data = args[index];
factory.addMultipart(nameTemplate, fileNameTemplate, data, multiparts, args);
}
request.setMultiparts(multiparts);
// setup ssl keystore
if (sslKeyStoreId != null) {
SSLKeyStore sslKeyStore = null;
String keyStoreId = sslKeyStoreId.render(args);
if (StringUtils.isNotEmpty(keyStoreId)) {
sslKeyStore = configuration.getKeyStore(keyStoreId);
request.setKeyStore(sslKeyStore);
}
}
if (encoder != null) {
request.setEncoder(encoder);
}
if (decoder != null) {
request.setDecoder(decoder);
}
if (progressStep >= 0) {
request.setProgressStep(progressStep);
}
if (configuration.getDefaultParameters() != null) {
request.addNameValue(configuration.getDefaultParameters());
}
if (baseHeaders != null && baseHeaders.length > 0) {
for (MappingTemplate baseHeader : baseHeaders) {
String headerText = baseHeader.render(args);
String[] headerNameValue = headerText.split(":", 2);
if (headerNameValue.length > 1) {
String name = headerNameValue[0].trim();
if (request.getHeader(name) == null) {
request.addHeader(name, headerNameValue[1].trim());
}
}
}
}
if (configuration.getDefaultHeaders() != null) {
request.addHeaders(configuration.getDefaultHeaders());
}
List<RequestNameValue> dataNameValueList = new ArrayList<>();
renderedContentType = request.getContentType();
if (renderedContentType == null || renderedContentType.equalsIgnoreCase(ContentType.APPLICATION_X_WWW_FORM_URLENCODED)) {
for (int i = 0; i < dataTemplateArray.length; i++) {
MappingTemplate dataTemplate = dataTemplateArray[i];
String data = dataTemplate.render(args);
String[] paramArray = data.split("&");
for (int j = 0; j < paramArray.length; j++) {
String dataParam = paramArray[j];
String[] dataNameValue = dataParam.split("=", 2);
if (dataNameValue.length > 0) {
String name = dataNameValue[0].trim();
RequestNameValue nameValue = new RequestNameValue(name, type.getDefaultParamTarget());
if (dataNameValue.length == 2) {
nameValue.setValue(dataNameValue[1].trim());
}
nameValueList.add(nameValue);
dataNameValueList.add(nameValue);
}
}
}
} else {
for (int i = 0; i < dataTemplateArray.length; i++) {
MappingTemplate dataTemplate = dataTemplateArray[i];
String data = dataTemplate.render(args);
request.addBody(data);
}
}
request.addNameValue(nameValueList);
for (int i = 0; i < headerTemplateArray.length; i++) {
MappingTemplate headerTemplate = headerTemplateArray[i];
String header = headerTemplate.render(args);
String[] headNameValue = header.split(":", 2);
if (headNameValue.length > 0) {
String name = headNameValue[0].trim();
RequestNameValue nameValue = new RequestNameValue(name, TARGET_HEADER);
if (headNameValue.length == 2) {
nameValue.setValue(headNameValue[1].trim());
}
request.addHeader(nameValue);
}
}
if (timeout != null) {
request.setTimeout(timeout);
} else if (baseTimeout != null) {
request.setTimeout(baseTimeout);
} else if (configuration.getTimeout() != null) {
request.setTimeout(configuration.getTimeout());
}
if (connectTimeout != null) {
request.setConnectTimeout(connectTimeout);
} else if (baseConnectTimeout != null) {
request.setConnectTimeout(baseConnectTimeout);
} else if (configuration.getConnectTimeout() != null) {
request.setConnectTimeout(configuration.getConnectTimeout());
}
if (readTimeout != null) {
request.setReadTimeout(readTimeout);
} else if (baseReadTimeout != null) {
request.setReadTimeout(baseReadTimeout);
} else if (configuration.getReadTimeout() != null) {
request.setReadTimeout(configuration.getReadTimeout());
}
if (retryCount != null) {
request.setMaxRetryCount(retryCount);
} else if (baseRetryCount != null) {
request.setMaxRetryCount(baseRetryCount);
} else if (configuration.getMaxRetryCount() != null) {
request.setMaxRetryCount(configuration.getMaxRetryCount());
}
if (maxRetryInterval >= 0) {
request.setMaxRetryInterval(maxRetryInterval);
} else if (baseMaxRetryInterval != null) {
request.setMaxRetryInterval(baseMaxRetryInterval);
} else if (configuration.getMaxRetryInterval() >= 0) {
request.setMaxRetryInterval(configuration.getMaxRetryInterval());
}
Class globalRetryerClass = configuration.getRetryer();
if (retryerClass != null && ForestRetryer.class.isAssignableFrom(retryerClass)) {
request.setRetryer(retryerClass);
} else if (baseRetryerClass != null && ForestRetryer.class.isAssignableFrom(baseRetryerClass)) {
request.setRetryer(baseRetryerClass);
} else if (globalRetryerClass != null && ForestRetryer.class.isAssignableFrom(globalRetryerClass)) {
request.setRetryer(globalRetryerClass);
}
if (onSuccessParameter != null) {
OnSuccess<?> onSuccessCallback = (OnSuccess<?>) args[onSuccessParameter.getIndex()];
request.setOnSuccess(onSuccessCallback);
}
if (onErrorParameter != null) {
OnError onErrorCallback = (OnError) args[onErrorParameter.getIndex()];
request.setOnError(onErrorCallback);
}
if (onRedirectionParameter != null) {
OnRedirection onRedirectionCallback = (OnRedirection) args[onRedirectionParameter.getIndex()];
request.setOnRedirection(onRedirectionCallback);
}
if (onProgressParameter != null) {
OnProgress onProgressCallback = (OnProgress) args[onProgressParameter.getIndex()];
request.setOnProgress(onProgressCallback);
}
if (onSaveCookieParameter != null) {
OnSaveCookie onSaveCookieCallback = (OnSaveCookie) args[onSaveCookieParameter.getIndex()];
request.setOnSaveCookie(onSaveCookieCallback);
}
if (onLoadCookieParameter != null) {
OnLoadCookie onLoadCookieCallback = (OnLoadCookie) args[onLoadCookieParameter.getIndex()];
request.setOnLoadCookie(onLoadCookieCallback);
}
String dataType = dataTypeTemplate.render(args);
if (StringUtils.isEmpty(dataType)) {
request.setDataType(ForestDataType.TEXT);
} else {
dataType = dataType.toUpperCase();
ForestDataType forestDataType = ForestDataType.findByName(dataType);
request.setDataType(forestDataType);
}
if (interceptorAttributesList != null && interceptorAttributesList.size() > 0) {
for (InterceptorAttributes attributes : interceptorAttributesList) {
InterceptorAttributes newAttrs = attributes.clone();
request.addInterceptorAttributes(newAttrs.getInterceptorClass(), newAttrs);
request.getInterceptorAttributes(newAttrs.getInterceptorClass()).render(args);
}
}
if (globalInterceptorList != null && globalInterceptorList.size() > 0) {
for (Interceptor item : globalInterceptorList) {
request.addInterceptor(item);
}
}
if (baseInterceptorList != null && baseInterceptorList.size() > 0) {
for (Interceptor item : baseInterceptorList) {
request.addInterceptor(item);
}
}
if (interceptorList != null && interceptorList.size() > 0) {
for (Interceptor item : interceptorList) {
request.addInterceptor(item);
}
}
return request;
}
use of com.dtflys.forest.exceptions.ForestRuntimeException in project forest by dromara.
the class FormBodyLifeCycle method onParameterInitialized.
@Override
public void onParameterInitialized(ForestMethod method, MappingParameter parameter, FormBody annotation) {
super.onParameterInitialized(method, parameter, annotation);
MetaRequest metaRequest = method.getMetaRequest();
String methodName = methodName(method);
if (metaRequest == null) {
throw new ForestRuntimeException("[Forest] method '" + methodName + "' has not bind a Forest request annotation. Hence the annotation @FormBody cannot be bind on a parameter in this method.");
}
String contentType = metaRequest.getContentType();
if (StringUtils.isNotEmpty(contentType) && !ContentType.APPLICATION_X_WWW_FORM_URLENCODED.equals(contentType) && !ContentType.MULTIPART_FORM_DATA.equals(contentType) && contentType.indexOf("$") < 0) {
throw new ForestRuntimeException("[Forest] the Content-Type of request binding on method '" + methodName + "' has already been set value '" + contentType + "', not 'application/x-www-form-urlencoded'. Hence the annotation @FormBody cannot be bind on a parameter in this method.");
}
if (StringUtils.isBlank(contentType)) {
metaRequest.setContentType(ContentType.APPLICATION_X_WWW_FORM_URLENCODED);
}
}
Aggregations