Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit62b795b

Browse files
Thomasrludomikula
Thomasr
authored andcommitted
Add localeContextResolver using lang query param
Add error handler & retry logic in flow endpointAdd chinese locale file
1 parenta5c1aad commit62b795b

File tree

7 files changed

+348
-6
lines changed

7 files changed

+348
-6
lines changed

‎server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/exception/BizError.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,12 @@ public enum BizError {
153153
BUNDLE_NAME_CONFLICT(500,6403),
154154
ILLEGAL_BUNDLE_PERMISSION_ID(500,6404),
155155

156-
//slug 6501 -6501
156+
//slug 6501 -6502
157157
SLUG_DUPLICATE_ENTRY(403,6501),
158-
SLUG_INVALID(403,6502);
158+
SLUG_INVALID(403,6502),
159+
160+
//flow 6601 - 6601
161+
FLOW_ERROR(500,6601);
159162

160163
static {
161164
checkDuplicates(values(),BizError::getBizErrorCode);

‎server/api-service/lowcoder-sdk/src/main/resources/locale_en.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,4 +284,5 @@ USER_NOT_EXIST=User not exist.
284284
DUPLICATE_AUTH_CONFIG_ADDITION=Provider auth type already added to organization
285285
EMAIL_PROVIDER_DISABLED=Email provider is disabled.
286286
SLUG_DUPLICATE_ENTRY=Slug already exists
287-
SLUG_INVALID=Slug format is invalid
287+
SLUG_INVALID=Slug format is invalid
288+
FLOW_ERROR=Flow error message: {0}

‎server/api-service/lowcoder-sdk/src/main/resources/locale_zh.properties

Lines changed: 288 additions & 0 deletions
Large diffs are not rendered by default.

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/configuration/CustomWebFluxConfiguration.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,19 @@
77
importorg.springframework.beans.factory.annotation.Value;
88
importorg.springframework.context.annotation.Bean;
99
importorg.springframework.context.annotation.Configuration;
10+
importorg.springframework.context.i18n.LocaleContext;
11+
importorg.springframework.context.i18n.SimpleLocaleContext;
1012
importorg.springframework.http.codec.ServerCodecConfigurer;
1113
importorg.springframework.http.codec.json.Jackson2JsonDecoder;
1214
importorg.springframework.http.codec.json.Jackson2JsonEncoder;
1315
importorg.springframework.util.unit.DataSize;
1416
importorg.springframework.web.reactive.config.DelegatingWebFluxConfiguration;
1517
importorg.springframework.web.reactive.function.server.support.RouterFunctionMapping;
18+
importorg.springframework.web.server.ServerWebExchange;
19+
importorg.springframework.web.server.i18n.LocaleContextResolver;
20+
21+
importjava.util.List;
22+
importjava.util.Locale;
1623

1724
@RequiredArgsConstructor
1825
@Configuration
@@ -43,4 +50,28 @@ protected void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
4350
.jackson2JsonEncoder(newJackson2JsonEncoder(objectMapper()));
4451
}
4552

53+
@Bean
54+
publicLocaleContextResolverlocaleContextResolver() {
55+
returnnewLocaleContextResolver() {
56+
@Override
57+
publicLocaleContextresolveLocaleContext(ServerWebExchangeexchange) {
58+
List<String>language =exchange.getRequest().getQueryParams().getOrDefault("lang",List.of("en_US"));
59+
StringlocaleStr =language.get(0);
60+
String[]parts =localeStr.split("_");
61+
if(parts.length ==2) {
62+
Localelocale =newLocale(parts[0],parts[1]);
63+
returnnewSimpleLocaleContext(locale);
64+
}else {
65+
Localelocale =newLocale(parts[0]);
66+
returnnewSimpleLocaleContext(locale);
67+
}
68+
}
69+
70+
@Override
71+
publicvoidsetLocaleContext(ServerWebExchangeexchange,LocaleContextlocaleContext) {
72+
thrownewUnsupportedOperationException("Cannot change HTTP accept header - use a different locale context resolution strategy");
73+
}
74+
};
75+
}
76+
4677
}

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/GlobalContextFilter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
importorg.lowcoder.infra.util.NetworkUtils;
1212
importorg.lowcoder.sdk.util.CookieHelper;
1313
importorg.lowcoder.sdk.util.UriUtils;
14+
importorg.springframework.context.i18n.LocaleContext;
1415
importorg.springframework.core.Ordered;
1516
importorg.springframework.http.HttpMethod;
1617
importorg.springframework.http.server.reactive.ServerHttpRequest;
@@ -20,6 +21,7 @@
2021
importorg.springframework.web.server.WebFilterChain;
2122
importreactor.core.publisher.Mono;
2223

24+
importjava.util.Locale;
2325
importjava.util.Map;
2426
importjava.util.Map.Entry;
2527
importjava.util.Optional;
@@ -98,7 +100,10 @@ private Map<String, Object> buildContextMap(ServerWebExchange serverWebExchange,
98100
contextMap.put(REQUEST_PATH,request.getPath().pathWithinApplication().value());
99101
contextMap.put(REQUEST,request);
100102
contextMap.put(REQUEST_METHOD,ofNullable(request.getMethod()).map(HttpMethod::name).orElse(""));
101-
contextMap.put(CLIENT_LOCALE,globalContextService.getClientLocale(request));
103+
104+
LocaleContextlocaleContext =serverWebExchange.getLocaleContext();
105+
LocalecurrentLocale =localeContext.getLocale() !=null ?localeContext.getLocale() :Locale.ENGLISH;
106+
contextMap.put(CLIENT_LOCALE,currentLocale);
102107
contextMap.put(CURRENT_ORG_MEMBER,orgMemberService.getCurrentOrgMember(visitorId).cache());
103108
contextMap.put(VISITOR_TOKEN,cookieHelper.getCookieToken(serverWebExchange));
104109
contextMap.put(DOMAIN,UriUtils.getRefererDomainFromRequest(serverWebExchange));

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/misc/ApiFlowController.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,24 @@
44
importlombok.RequiredArgsConstructor;
55
importorg.apache.commons.lang.StringUtils;
66
importorg.lowcoder.api.authentication.request.AuthException;
7+
importorg.lowcoder.sdk.exception.BizError;
8+
importorg.lowcoder.sdk.exception.BizException;
79
importorg.lowcoder.sdk.util.JsonUtils;
810
importorg.lowcoder.sdk.webclient.WebClientBuildHelper;
911
importorg.springframework.http.HttpHeaders;
1012
importorg.springframework.http.HttpMethod;
13+
importorg.springframework.http.HttpStatusCode;
1114
importorg.springframework.http.MediaType;
1215
importorg.springframework.web.bind.annotation.RestController;
1316
importorg.springframework.web.reactive.function.BodyInserters;
17+
importorg.springframework.web.server.i18n.AcceptHeaderLocaleContextResolver;
1418
importreactor.core.publisher.Mono;
19+
importreactor.util.retry.Retry;
1520

21+
importjava.time.Duration;
22+
importjava.time.temporal.ChronoUnit;
1623
importjava.util.Map;
24+
importjava.util.Objects;
1725
importjava.util.function.Consumer;
1826

1927
importstaticorg.lowcoder.api.authentication.util.AuthenticationUtils.mapToAuthToken;
@@ -38,7 +46,11 @@ public Mono<String> flow(FlowRequest flowRequest) {
3846
.body(BodyInserters.fromValue(jsonBody))
3947
.headers(httpHeaders ->flowRequest.headers().forEach(httpHeaders::add))
4048
.retrieve()
41-
.bodyToMono(String.class);
49+
.bodyToMono(String.class)
50+
.onErrorResume(Mono::error)
51+
.retryWhen(Retry.backoff(Objects.requireNonNullElse(flowRequest.retries(),0),
52+
Duration.of(Objects.requireNonNullElse(flowRequest.timeout(),HTTP_TIMEOUT),ChronoUnit.SECONDS))
53+
.onRetryExhaustedThrow(((retryBackoffSpec,retrySignal) ->newBizException(BizError.FLOW_ERROR,"FLOW_ERROR",retrySignal.failure().getMessage()))));
4254
}catch (Exceptione) {
4355
returnMono.error(e);
4456
}

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/misc/ApiFlowEndpoints.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface ApiFlowEndpoints
2121
publicrecordFlowRequest(Stringpath,
2222
Stringmethod,
2323
Map<String,Object>data,
24-
Map<String,String>headers) {
24+
Map<String,String>headers,
25+
Integertimeout,
26+
Integerretries) {
2527
}
2628
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp