import 정리

This commit is contained in:
ckx6954 2024-12-09 13:10:44 +09:00
parent fb2cf3ff00
commit 7cb22f5464
10 changed files with 76 additions and 102 deletions

View File

@ -1,15 +1,12 @@
package io.company.localhost.common.config.mybatis; package io.company.localhost.common.config.mybatis;
import javax.sql.DataSource; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy; import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Configuration @Configuration

View File

@ -1,15 +1,13 @@
package io.company.localhost.common.config.mybatis; package io.company.localhost.common.config.mybatis;
import javax.sql.DataSource; import io.company.localhost.common.constants.LocalhostProject;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
@ -17,8 +15,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import io.company.localhost.common.constants.LocalhostProject; import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Configuration @Configuration
@ -40,6 +37,7 @@ public class MybatisConfig {
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
assert sqlSessionFactory != null;
org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration(); org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();
//스네이크 케이스 자동 카멜 케이스로 매핑 //스네이크 케이스 자동 카멜 케이스로 매핑

View File

@ -1,13 +1,15 @@
package io.company.localhost.common.dto; package io.company.localhost.common.dto;
import java.math.BigDecimal;
import java.util.Map;
import org.apache.commons.collections.map.ListOrderedMap; import org.apache.commons.collections.map.ListOrderedMap;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Map;
public class MapDto extends ListOrderedMap { public class MapDto extends ListOrderedMap {
@Serial
private static final long serialVersionUID = -5354101794266218602L; private static final long serialVersionUID = -5354101794266218602L;
public MapDto() { public MapDto() {

View File

@ -1,5 +1,18 @@
package io.company.localhost.common.resolver; package io.company.localhost.common.resolver;
import io.company.localhost.common.annotation.ReqMap;
import io.company.localhost.common.dto.MapDto;
import io.company.localhost.common.webEnum.WebEnum;
import io.company.localhost.utils.JacksonUtil;
import io.company.localhost.utils.WebUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolverComposite;
import org.springframework.web.method.support.ModelAndViewContainer;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
@ -7,20 +20,6 @@ import java.util.Arrays;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.List; import java.util.List;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolverComposite;
import org.springframework.web.method.support.ModelAndViewContainer;
import io.company.localhost.common.annotation.ReqMap;
import io.company.localhost.common.dto.MapDto;
import io.company.localhost.utils.JacksonUtil;
import io.company.localhost.utils.WebUtil;
import io.company.localhost.common.webEnum.WebEnum;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class RequestToMapArgumentResolver extends HandlerMethodArgumentResolverComposite { public class RequestToMapArgumentResolver extends HandlerMethodArgumentResolverComposite {
@ -52,7 +51,7 @@ public class RequestToMapArgumentResolver extends HandlerMethodArgumentResolverC
// HTTP ServletRequest를 얻어옵니다. // HTTP ServletRequest를 얻어옵니다.
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest(); HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
MapDto parameterMap = null; MapDto parameterMap;
try { try {
// 요청이 JSON인지 확인 // 요청이 JSON인지 확인
boolean isJson = WebUtil.isJson(request); boolean isJson = WebUtil.isJson(request);

View File

@ -1,21 +1,6 @@
package io.company.localhost.common.wrapper; package io.company.localhost.common.wrapper;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import io.company.localhost.utils.JacksonUtil; import io.company.localhost.utils.JacksonUtil;
import io.netty.handler.codec.ValueConverter; import io.netty.handler.codec.ValueConverter;
import jakarta.servlet.ReadListener; import jakarta.servlet.ReadListener;
@ -23,6 +8,15 @@ import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper; import jakarta.servlet.http.HttpServletRequestWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Objects;
// body 읽어서 cash로 만듬 // body 읽어서 cash로 만듬
// 필요하면 filter로 사용 // 필요하면 filter로 사용
@ -39,7 +33,7 @@ public class CachedBodyRequestWrapper extends HttpServletRequestWrapper {
super(request); super(request);
String characterEncoding = request.getCharacterEncoding(); String characterEncoding = request.getCharacterEncoding();
if (StringUtils.hasText(characterEncoding) == false) { if (!StringUtils.hasText(characterEncoding)) {
characterEncoding = StandardCharsets.UTF_8.name(); characterEncoding = StandardCharsets.UTF_8.name();
} }
@ -63,7 +57,7 @@ public class CachedBodyRequestWrapper extends HttpServletRequestWrapper {
return; return;
} }
Object bodyObject = null; Object bodyObject;
if (requestBody.startsWith("[")) { // List if (requestBody.startsWith("[")) { // List
bodyObject = JacksonUtil.fromJson(requestBody, new TypeReference<List<Map<String, Object>>>() { bodyObject = JacksonUtil.fromJson(requestBody, new TypeReference<List<Map<String, Object>>>() {
}); });
@ -94,9 +88,9 @@ public class CachedBodyRequestWrapper extends HttpServletRequestWrapper {
/** json body 관련 메소드 END */ /** json body 관련 메소드 END */
private class CachedBodyServletInputStream extends ServletInputStream { private static class CachedBodyServletInputStream extends ServletInputStream {
private InputStream cachedBodyInputStream; private final InputStream cachedBodyInputStream;
public CachedBodyServletInputStream(byte[] cachedBody) { public CachedBodyServletInputStream(byte[] cachedBody) {
this.cachedBodyInputStream = new ByteArrayInputStream(cachedBody); this.cachedBodyInputStream = new ByteArrayInputStream(cachedBody);

View File

@ -1,8 +1,7 @@
package io.company.localhost.common.wrapper; package io.company.localhost.common.wrapper;
import java.lang.annotation.Annotation; import jakarta.servlet.http.HttpServletRequest;
import java.util.Objects; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -10,8 +9,8 @@ import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerExecutionChain; import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import jakarta.servlet.http.HttpServletRequest; import java.lang.annotation.Annotation;
import lombok.extern.slf4j.Slf4j; import java.util.Objects;
//특정 어노테이션이 있는지 확인하는용 @ReqMap 확인용 //특정 어노테이션이 있는지 확인하는용 @ReqMap 확인용
@ -46,7 +45,7 @@ public class RequestMappingWrapper {
if (Objects.nonNull(chain)) { if (Objects.nonNull(chain)) {
Object handler = chain.getHandler(); Object handler = chain.getHandler();
if (Objects.nonNull(handler) && handler instanceof HandlerMethod) { if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) chain.getHandler(); HandlerMethod handlerMethod = (HandlerMethod) chain.getHandler();
// Annotation methodAnnotation = // Annotation methodAnnotation =
// handlerMethod.getMethodAnnotation(annotationType); // handlerMethod.getMethodAnnotation(annotationType);
@ -94,7 +93,7 @@ public class RequestMappingWrapper {
if (Objects.nonNull(chain)) { if (Objects.nonNull(chain)) {
Object handler = chain.getHandler(); Object handler = chain.getHandler();
if (Objects.nonNull(handler) && handler instanceof HandlerMethod) { if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) chain.getHandler(); HandlerMethod handlerMethod = (HandlerMethod) chain.getHandler();
// for(Class<A> anno : annotationTypes) { // for(Class<A> anno : annotationTypes) {
// A methodAnnotation = handlerMethod.getMethodAnnotation(anno); // A methodAnnotation = handlerMethod.getMethodAnnotation(anno);

View File

@ -1,5 +1,17 @@
package io.company.localhost.utils; package io.company.localhost.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import io.company.localhost.common.config.JacksonCommonConfig;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ResourceUtils;
import org.springframework.util.StringUtils;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -8,20 +20,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ResourceUtils;
import org.springframework.util.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import io.company.localhost.common.config.JacksonCommonConfig;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
//json 변환 유틸 //json 변환 유틸
@Slf4j @Slf4j
@UtilityClass @UtilityClass
@ -70,7 +68,7 @@ public class JacksonUtil {
* @return T * @return T
*/ */
public static <T> T fromJson(String jsonString, Class<T> targetType) { public static <T> T fromJson(String jsonString, Class<T> targetType) {
if (StringUtils.hasText(jsonString) == false) { if (!StringUtils.hasText(jsonString)) {
return null; return null;
} }
@ -93,7 +91,7 @@ public class JacksonUtil {
* @return T * @return T
*/ */
public static <T> T fromJson(String jsonString, TypeReference<T> targetType) { public static <T> T fromJson(String jsonString, TypeReference<T> targetType) {
if (StringUtils.hasText(jsonString) == false) { if (!StringUtils.hasText(jsonString)) {
return null; return null;
} }
@ -116,7 +114,7 @@ public class JacksonUtil {
* @return List<T> * @return List<T>
*/ */
public static <E> List<E> listFromJson(String jsonString, Class<E> targetType) { public static <E> List<E> listFromJson(String jsonString, Class<E> targetType) {
if (StringUtils.hasText(jsonString) == false) { if (!StringUtils.hasText(jsonString)) {
return Collections.emptyList(); return Collections.emptyList();
} }
@ -136,7 +134,7 @@ public class JacksonUtil {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <T> T xmlToJsonByJackson(String filePath) { public static <T> T xmlToJsonByJackson(String filePath) {
if (StringUtils.hasText(filePath) == false) { if (!StringUtils.hasText(filePath)) {
return null; return null;
} }

View File

@ -1,9 +1,10 @@
package io.company.localhost.utils; package io.company.localhost.utils;
import java.lang.annotation.Annotation; import io.company.localhost.common.webEnum.WebEnum;
import java.util.Map; import io.company.localhost.common.wrapper.RequestMappingWrapper;
import java.util.Objects; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
@ -11,11 +12,9 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.HandlerMapping;
import io.company.localhost.common.wrapper.RequestMappingWrapper; import java.lang.annotation.Annotation;
import io.company.localhost.common.webEnum.WebEnum; import java.util.Map;
import jakarta.servlet.http.HttpServletRequest; import java.util.Objects;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
//web 요청에 대한 정보얻을 사용 //web 요청에 대한 정보얻을 사용
@ -33,7 +32,7 @@ public class WebUtil {
* @return HttpServletRequest * @return HttpServletRequest
*/ */
public static HttpServletRequest getRequest() { public static HttpServletRequest getRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
} }
/** /**
@ -42,7 +41,7 @@ public class WebUtil {
* @return HttpServletResponse * @return HttpServletResponse
*/ */
public static HttpServletResponse getResponse() { public static HttpServletResponse getResponse() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();
} }
/** /**
@ -92,12 +91,14 @@ public class WebUtil {
public static <T> T getAnnotation(HttpServletRequest request, Class<? extends Annotation> annotationType) { public static <T> T getAnnotation(HttpServletRequest request, Class<? extends Annotation> annotationType) {
RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class); RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class);
assert wrapper != null;
return wrapper.getAnnotation(request, annotationType); return wrapper.getAnnotation(request, annotationType);
} }
public static <T> T getAnnotation(HandlerMethod handlerMethod, Class<? extends Annotation> annotationType) { public static <T> T getAnnotation(HandlerMethod handlerMethod, Class<? extends Annotation> annotationType) {
RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class); RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class);
assert wrapper != null;
return wrapper.getAnnotation(handlerMethod, annotationType); return wrapper.getAnnotation(handlerMethod, annotationType);
} }
@ -113,6 +114,7 @@ public class WebUtil {
Class<A>... annotationTypes) { Class<A>... annotationTypes) {
RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class); RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class);
assert wrapper != null;
return wrapper.hasAnyAnnotation(request, annotationTypes); return wrapper.hasAnyAnnotation(request, annotationTypes);
} }
@ -121,6 +123,7 @@ public class WebUtil {
Class<A>... annotationTypes) { Class<A>... annotationTypes) {
RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class); RequestMappingWrapper wrapper = ContextUtil.getBean(RequestMappingWrapper.class);
assert wrapper != null;
return wrapper.hasAnyAnnotation(handlerMethod, annotationTypes); return wrapper.hasAnyAnnotation(handlerMethod, annotationTypes);
} }

View File

@ -1,18 +1,9 @@
package io.company.localhost.vo; package io.company.localhost.vo;
import lombok.*;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter @Getter
@Setter @Setter
@Builder @Builder

View File

@ -4,11 +4,4 @@ datasource:
jdbc-url: jdbc:log4jdbc:mariadb://192.168.0.251:3306/test jdbc-url: jdbc:log4jdbc:mariadb://192.168.0.251:3306/test
username: root username: root
password: host1234 password: host1234
hikari:
maximum-pool-size: 1
minimum-idle: 1
connection-timeout: 30000
validation-timeout: 5000
max-lifetime: 1800000
idle-timeout: 600000