BaseException추가 및 Locale에 따른 Message 처리
This commit is contained in:
parent
d65065ccee
commit
305532f7c8
@ -1,6 +1,8 @@
|
||||
package com.interplug.qcast.biz;
|
||||
|
||||
import com.interplug.qcast.config.message.Messages;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@ -10,11 +12,11 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequestMapping("/api/main")
|
||||
public class MainController {
|
||||
|
||||
@GetMapping("/v1.0")
|
||||
public String main() {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("MainController");
|
||||
}
|
||||
return "Main";
|
||||
@Autowired
|
||||
Messages message;
|
||||
|
||||
@GetMapping
|
||||
public String Main() {
|
||||
return message.getMessage("example.msg.001");
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
package com.interplug.qcast.config.Exception;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
public class BaseException extends Exception{
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 6263785244527827114L;
|
||||
|
||||
public BaseException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public BaseException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public BaseException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package com.interplug.qcast.config.message;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.support.ResourceBundleMessageSource;
|
||||
|
||||
@Configuration
|
||||
public class MessageConfig {
|
||||
|
||||
@Bean
|
||||
public MessageSource messageSource() throws IOException {
|
||||
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
|
||||
messageSource.setBasename("message/message");
|
||||
messageSource.setDefaultEncoding("UTF-8");
|
||||
messageSource.setFallbackToSystemLocale(false);
|
||||
|
||||
return messageSource;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
package com.interplug.qcast.config.message;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class Messages {
|
||||
|
||||
@Autowired
|
||||
private MessageSource messageSource;
|
||||
|
||||
public String getMessage(String code) {
|
||||
return messageSource.getMessage(code, null, LocaleContextHolder.getLocale());
|
||||
}
|
||||
|
||||
public String getMessage(String code, @Nullable Object... args) {
|
||||
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,12 +2,19 @@ package com.interplug.qcast.config.security;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.interplug.qcast.config.json.HtmlCharacterEscapes;
|
||||
import io.micrometer.common.lang.NonNullApi;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.Locale;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.web.servlet.LocaleResolver;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
|
||||
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
@ -43,4 +50,49 @@ public class WebConfig implements WebMvcConfigurer {
|
||||
return new MappingJackson2HttpMessageConverter(copy);
|
||||
}
|
||||
|
||||
/**
|
||||
* 기본 로케일 설정
|
||||
* @return LocaleResolver
|
||||
*/
|
||||
@Bean
|
||||
public LocaleResolver localeResolver() {
|
||||
HeaderLocaleResolver localeResolver = new HeaderLocaleResolver();
|
||||
localeResolver.setDefaultLocale(Locale.KOREA);
|
||||
return localeResolver;
|
||||
}
|
||||
|
||||
/**
|
||||
* 로케일 변경 인터셉터
|
||||
* @return LocaleChangeInterceptor
|
||||
*/
|
||||
@Bean
|
||||
public LocaleChangeInterceptor localeChangeInterceptor() {
|
||||
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
|
||||
localeChangeInterceptor.setParamName("lang");
|
||||
return localeChangeInterceptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* 인터셉터 등록
|
||||
* @param registry InterceptorRegistry
|
||||
*/
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(localeChangeInterceptor());
|
||||
}
|
||||
|
||||
/**
|
||||
* locale 변경을 위한 HeaderLocaleResolver
|
||||
*/
|
||||
@NonNullApi
|
||||
private static class HeaderLocaleResolver extends AcceptHeaderLocaleResolver {
|
||||
@Override
|
||||
public Locale resolveLocale(HttpServletRequest request) {
|
||||
String lang = request.getHeader("lang");
|
||||
if (lang == null || lang.isEmpty()) {
|
||||
return super.resolveLocale(request);
|
||||
}
|
||||
return new Locale(lang);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,8 +2,11 @@ package com.interplug.qcast.config.swagger;
|
||||
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.info.Info;
|
||||
import io.swagger.v3.oas.models.media.StringSchema;
|
||||
import io.swagger.v3.oas.models.parameters.Parameter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springdoc.core.customizers.OpenApiCustomizer;
|
||||
import org.springdoc.core.models.GroupedOpenApi;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@ -31,6 +34,16 @@ public class SwaggerConfig {
|
||||
|
||||
@Bean
|
||||
public GroupedOpenApi allApi() {
|
||||
return GroupedOpenApi.builder().group("ALL").packagesToScan("com.interplug.qcast.biz").build();
|
||||
return GroupedOpenApi.builder().group("ALL").packagesToScan("com.interplug.qcast.biz").addOpenApiCustomizer(openApiCustomizer()).build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public OpenApiCustomizer openApiCustomizer() {
|
||||
Parameter lang = new Parameter().name("lang").description("Language").in("header").schema(new StringSchema());
|
||||
return openApi -> openApi.getPaths().values().forEach(
|
||||
pathItem -> pathItem.readOperations().forEach(
|
||||
operation -> operation.addParametersItem(lang)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
1
src/main/resources/message/message_ja.properties
Normal file
1
src/main/resources/message/message_ja.properties
Normal file
@ -0,0 +1 @@
|
||||
example.msg.001=一般メッセージ
|
||||
1
src/main/resources/message/message_ko.properties
Normal file
1
src/main/resources/message/message_ko.properties
Normal file
@ -0,0 +1 @@
|
||||
example.msg.001=일반메시지
|
||||
Loading…
x
Reference in New Issue
Block a user