출처: http://november11tech.tistory.com/88 [Mr.november11] '개발' 카테고리의 글 목록 :: 사월은 봄이다.

설정만 해주면 된다.

내 어플리케이션은 application.yml에서 설정 파일을 가지고 있음.

 

 

show-sql: true

hibernate.format_sql: true

설정 해 주면 된다.

https://napsis.blog.me/221687528772

'개발 > Spring' 카테고리의 다른 글

JPA NamedNativeQuery 사용하기  (1) 2019.01.31
spring boot, maiadb] insert into table emoji  (0) 2018.12.11
responseentity, String to json  (0) 2018.11.23
junit test  (0) 2018.10.22
JunitTest] Mock 사용하기  (0) 2018.08.21
SELECT @rank:=-1;
update player_mon_tmp_more set promotion_order = @rank:=@rank+1 
where player_id='abc';

환경: mysql

player_id가 'abc'인 사람의 promotion_order 값을 0부터 채워놓는다.

 

 

https://napsis.blog.me/221566826102

톰캣에서 하나의 프로젝트에 멀티 도메인을 주고 싶다면,


<Host name="message-dev.test.com" appBase="webapps-hermes" unpackWARs="true" autoDeploy="true"> <Alias>message-dev.test.com</Alias> <Alias>auth-dev.test.com</Alias> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host>



톰캣 설정에서 하나의 appBase에 여러개의 도메인을 주고 싶다면,

Alias 설정을 해 주면 된다.




http://napsis.blog.me/221491029322

<html> <head> <title>Vue Sample</title> </head> <body> <div id="app"> {{message}} {{myMessage}} </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script> <script type="text/javascript"> new Vue({ el: '#app' ,data : { message : 'Hello Vue.Js !!!!' ,myMessage : '99999' } }); </script> </body> </html>

데이터 표현 방법 {{데이터}}

인스턴스를 생성해서 데이터를 사용한다.

el 은 사용할 인스턴스를 지정한다. 여기서는 app이라는 아이디를 가진 녀석을 root 로 지정하였음.

data는 화면에 표현하거나 사용할 녀석들을 써줌..

일단 여기까진 쉽지.



결과




http://napsis.blog.me/221473645644

나의 네이버 

http://napsis.blog.me/221471975802



currencyId 예) USD, CNY

currencySign : $ ,

public String getCurrencySignByCurrencyId(String currencId) {
Locale locale = null; String currencySign = "";
for (Locale l : Locale.getAvailableLocales()) {
if (l.getCountry().length() == 2) {
String code = Currency.getInstance(l).getCurrencyCode();
if (currencId.equals(code)) {
locale = l; break;
}
}
}
if (locale == null) {
log.warn("Invalid currencyId. Requested currendId:" + currencId);
currencySign = currencId;
} else {
currencySign = Currency.getInstance(locale).getSymbol(locale);
}
return currencySign;
}

public String getCurrencySignByCurrencyId(String currencId) {
Locale locale = null; String currencySign = "";
for (Locale l : NumberFormat.getAvailableLocales()) {
String code = Currency.getInstance(l).getCurrencyCode();
if (currencId.equals(code)) {
locale = l; break;
}
}
if (locale == null) {
log.warn("Invalid currencyId. Requested currendId:" + currencId); currencySign = currencId;
} else {
currencySign = Currency.getInstance(locale).getSymbol(locale);
}
return currencySign;
}

아래쪽의 경우, 길이체크를 하지 않아도 된다.

왜지?

안에 들어있는 내용을 찍어봤을 때 다 같았는데 차이점을 잘 모르겠음



'개발 > JAVA' 카테고리의 다른 글

google sheet + java + maven  (0) 2019.02.10
Comparator 간단하게 이용하기  (0) 2019.02.05
NullPointerException  (0) 2018.12.24
Java8 함수형  (0) 2018.09.19
Math.random()  (0) 2018.08.07

My naver : https://blog.naver.com/napsis/221462366927

구글 시트를 읽어와야 했다...

후....... 왜 이리 자료가 없노.. 왠지 나중에 또 쓸 수 있으므로...

https://developers.google.com/sheets/api/quickstart/java

여길 보면 퀵 스타트 페이지가 있다. 따라하면 되는데, 구글 sheet api를 발급받아야 한다.

https://console.developers.google.com/flows/enableapi?apiid=sheets.googleapis.com

요기서 하면 된다.











이렇게 발급받는다. 검색해보면 더 자세히 설명해준 사이트도 많음

본격적으로.... 내가 삽질한 부분에 대해 이야기 해 보자면

maven.... 이 생퀴....

계속 import가 안돼서 다른 블로그에서 주로 하는대로 gradle로 하니까 되길래 직접 라이브러리들 비교해서 적어줬다. 그래서 결국...

<!-- google-->
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.23.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-jetty -->
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.23.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-sheets -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-sheets</artifactId>
<version>v4-rev516-1.23.0</version>
</dependency>


<!-- https://mvnrepository.com/artifact/jetty/org.mortbay.jetty -->
<!-- https://mvnrepository.com/artifact/jetty/org.mortbay.jetty -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.26</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mortbay.jetty/jetty-util -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>6.1.26</version>
</dependency>

<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5-20081211</version>
</dependency>

<!-- google-->

이걸 다 적어줌... 원래 다른 곳에서는 3개만 디펜던시 걸어주니까 다 알아서 해주던데..... 그냥 내 메이븐이 멍청했던 걸로하자...

gradle의 경우 maven central에서 직접 가지고 오기 때문... 이라고 한다....ㅂㄷㅂㄷ

이제 자바 코드

보면 아까 sheet api를 발급 받을 때 리턴 사이트 주소를 적어줘야 하는데 나 같은 경우는 단순하게

"http://localhost:8080"

라고만 적어줬다가 계속 400이 떴다.

그러다가 밑에 detail 누르니까

http://localhost:8080/Callback

라고 있길래 저래 바꿔주니까 됐음......... 뭐지.... 나만 왜....

암튼 자바 코드를 보면,





import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.sheets.v4.Sheets;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.ValueRange;
import com.nsuslab.dionysos.promotion.domain.AuthType;
import com.nsuslab.dionysos.promotionPayment.domain.GoogleSheetForm;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

import java.util.List;

일단 import 되는건 이정도다.

@RestController
public class PromotionPaymentController {
// OAUTH 2.0 연동시 지정한 OAuth 2.0 클라이언트 이름
private static final String APPLICATION_NAME = "application_name";

// OAUTH 2.0 연동시 credential을 디스크에 저장할 위치
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials/sheets.googleapis.com-java-quickstart");

// Global instance of the {@link FileDataStoreFactory}.
private static FileDataStoreFactory DATA_STORE_FACTORY;

// Global instance of the JSON factory.
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

// Global instance of the HTTP transport.
private static HttpTransport HTTP_TRANSPORT;

// Google Sheet API 권한을 SCOPE로 지정
private static final List<String> SCOPES = Arrays.asList(SheetsScopes.SPREADSHEETS);

// OAUTH 2.0 연동시 사용될 callback용 local receiver 포트 지정
private static final int LOCAL_SERVER_RECEIVER_PORT = 8080;

// HTTP_TRANSPORT, DATA_STORE_FACTORY 초기화
static {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
} catch (Throwable t) {
t.printStackTrace();
System.exit(1);
}
}

// OAUTH 2.0용 credential
public static Credential getOauth2Authorize() throws IOException {
// OAUTH 2.0용 secret josn 로드
InputStream in = PromotionPaymentController.class.getResourceAsStream("/client_secret.json");
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();

LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(LOCAL_SERVER_RECEIVER_PORT).build();

Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}

public static Sheets getSheetsService(AuthType authMode) throws IOException {
Credential credential = null;
if (authMode == AuthType.OAUTH20) {
credential = getOauth2Authorize();
}
return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
}

@PostMapping("/api/google/sheet")
public ResponseEntity RewardPromotions(@RequestBody GoogleSheetForm.Request request) throws IOException {
Sheets service = getSheetsService(AuthType.OAUTH20);
ValueRange response = service.spreadsheets().values()
.get(request.getSpreadSheetId(), request.getRange()).setMajorDimension("ROWS")
.execute();
List<List<Object>> values = response.getValues();
System.out.println(response.getValues().toString());
if (values == null || values.size() == 0) {
System.out.println("No data found.");
} else {
for (List row : values) {
if (row.size() > 0) {
System.out.println(row.get(0).toString());
}
}
}
return new ResponseEntity(HttpStatus.OK);
}

}

public enum AuthType {
OAUTH20
}

간단히 이정도인데 oauth2.0만 했음...

여기서 인증정보를 가진 client_secret.json은 resource 밑에 넣어둔다.









그리고 대충 이런느낌으로 생겼음





이렇게 나온다.

result






참고하면 좋을 사이트들...

https://developers.google.com/sheets/api/samples/reading?hl=ko

만약 기존 oath 키 없애고 새로 발급 받았다면, .credenctial에 저장한 sheets.googleapis.com-java-quickstart 를 삭제한다.

안그러면 401 뜸..










'개발 > JAVA' 카테고리의 다른 글

curreny sign 가져오기  (0) 2019.02.22
Comparator 간단하게 이용하기  (0) 2019.02.05
NullPointerException  (0) 2018.12.24
Java8 함수형  (0) 2018.09.19
Math.random()  (0) 2018.08.07
@Test public void testComparator(){ List<Integer> lists = new ArrayList<>(); for(int i = 0 ; i < 10 ; i++){ lists.add((int)(Math.random()*100+i)); } lists.forEach(r->{System.out.print(r+",");}); System.out.println("====="); lists.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }); lists.forEach(r->{System.out.print(r+",");}); System.out.println("-------"); }

<결과>

89,82,19,35,52,18,16,16,70,104,=====

16,16,18,19,35,52,70,82,89,104,-------

​http://napsis.blog.me/221458894824


'개발 > JAVA' 카테고리의 다른 글

curreny sign 가져오기  (0) 2019.02.22
google sheet + java + maven  (0) 2019.02.10
NullPointerException  (0) 2018.12.24
Java8 함수형  (0) 2018.09.19
Math.random()  (0) 2018.08.07

상황(cause)

JPA로 잘 사용하다가 쿼리를 짜게 되었다.

Need a customized query.


문제(problem)

기존 테이블에 없는 컬럼을 만들어서 리턴을 해주고 싶은데 JPA를 사용하면 불가능하다.

I want to return a custom column but JPA does not assist it if a table does not have a column.


해결

NamedNativeQuery를 사용.

Using NamedNativeQuery.



Entity Table


위와 같이 Transient 어노테이션이 있는 replyCount를 리턴에 사용하고 싶었다..

찾아본 결과 @SqlResultSetMapping,@ConstructorResult, @NamedNativeQuery 를 사용하면 된다.



사용예)

/** * A Message. */ @Entity @Table(name = "message") @NamedNativeQuery( name = "Message.findAllBy", query = "SELECT id, title, (...) as replyCount from message where title like concat('%', :title , '%')" ,resultSetMapping = "Message.findAllBy" ) @SqlResultSetMappings({ @SqlResultSetMapping( name = "Message.findAllBy", classes = { @ConstructorResult( targetClass = MessageThread.class, columns = { @ColumnResult(name = "id",type = Long.class),

@ColumnResult(name = "title", type = String.class),

@ColumnResult(name = "replyCount", type = Integer.class) } ) } ) }) public class Message implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotNull @Enumerated(EnumType.STRING) @Column(name = "type", nullable = false) private MessageType type; @Size(max = 1000) @Column(name = "title", length = 1000) private String title; @Column(name = "is_deleted") private Boolean isDeleted; @Size(max = 10000) @Column(name = "content", length = 10000) private String content; @Column(name = "created_date") private ZonedDateTime createdDate; @Column(name = "is_noticed") private Boolean isNoticed; @Column(name = "updated_date") private ZonedDateTime updatedDate = ZonedDateTime.now(); @Transient private Integer replyCount; public Long getId() { return id; } public void setId(Long id) { this.id = id; } .... Getter , Setter..... }

이제 커스텀되는 클래스를 만든다.

/** * A Message Thread. */ public class MessageThread implements Serializable { private static final long serialVersionUID = 1L; private Long id; private MessageType type; private String title; private Boolean isDeleted; private String content; private ZonedDateTime createdDate; private Boolean isNoticed; private ZonedDateTime updatedDate = ZonedDateTime.now(); private Integer replyCount; public Long getId() { return id; } public void setId(Long id) { this.id = id; }

.... Getter , Setter.....

public MessageThread (Long id, String title, Integer replyCount){ this.id = id; this.title = title;

this.replyCount = replyCount; } }



여기서 중요한 부분이 생성자다.

public MessageThread (Long id, String title, Integer replyCount){ this.id = id; this.title = title;

this.replyCount = replyCount; }

리턴을 원하는 컬럼을 생성자에 넣어줘야 받아올 수 있다.

Repository에서 파라미터 등을 넣어서 불러주고,

public interface MessageRepository extends JpaRepository<Message, Long> {
List<MessageThread> findAllBy(@Param("title") String title);
}

Test코드를 돌려 보면,

@Rollback
@Transactional
public class MessageServiceTest extends TestHelper {
@Autowired
private MessageRepository messageThreadRepository;

@Test
public void testGetListPlayerMessage() {

List<MessageThread> result = messageThreadRepository.findAllBy("nice");
result.forEach(p->{
System.out.println("replyCount:" + p.getReplyCount());
});
}
}

결과

replyCount:1
replyCount:1
replyCount:1
replyCount:8
replyCount:6
replyCount:2
replyCount:2
replyCount:2


유의할 점

NamedNativeQuery의 name, resultSetMapping, SqlResultSetMapping의 name과 repository의 함수명은 통일해 주는게 정신건강에 좋다.

https://blog.naver.com/napsis/221455599089

'개발 > Spring' 카테고리의 다른 글

Spring Boot JPA에서 로그 자세하게 찍어보기  (0) 2019.10.25
spring boot, maiadb] insert into table emoji  (0) 2018.12.11
responseentity, String to json  (0) 2018.11.23
junit test  (0) 2018.10.22
JunitTest] Mock 사용하기  (0) 2018.08.21

zgrep -w 'credit1111' ./myCredit.log.2018-11-26T21_01_01Z > 134.log

zgrep -w '찾는문자' 대상파일 > 출력파일명(생성됨)

grep -rn xxx * > tmp.txt (xxx가 들어간 모든 파일의 결과를 tmp.txt에 저장)



http://napsis.blog.me/221448251398

'개발 > Linux_Server' 카테고리의 다른 글

Ubuntu에 설치된 패키지를 확인하기  (0) 2018.09.10
tail로 로그 볼 때,  (0) 2018.02.18
리눅스 java 파일읽기  (0) 2018.02.18
ubuntu 환경변수 설정하기  (0) 2018.02.18
메모리 체크  (0) 2018.02.18

[env] spring-boot

잘 되다가 갑자기 NullPointerException에 시달렸다.


[ip-172-31-58-193] 2018:12:24 01:01:09.933 ERROR --- [http-nio-8080-exec-1] o.s.b.web.support.ErrorPageFilter : Forwarding to error page from request [/api/aaaaa/bbbbb/ccccc/ddddd/eeeeee/fff] due to exception [null]

[ip-172-31-58-193] java.lang.NullPointerException: null

[ip-172-31-58-193]      at org.springframework.validation.beanvalidation.SpringValidatorAdapter.processConstraintViolations(SpringValidatorAdapter.java:123)

[ip-172-31-58-193]      at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:94)

[ip-172-31-58-193]      at com.test.common.engine.validator.CollectionValidator.validate(CollectionValidator.java:35)

[ip-172-31-58-193]      at com.test.common.engine.aop.ValidHandler.valid(ValidHandler.java:72)

[ip-172-31-58-193]      at sun.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)

[ip-172-31-58-193]      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

[ip-172-31-58-193]      at java.lang.reflect.Method.invoke(Method.java:498)

[ip-172-31-58-193]      at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629)

[ip-172-31-58-193]      at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618)

[ip-172-31-58-193]      at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)

[ip-172-31-58-193]      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

[ip-172-31-58-193]      at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)

[ip-172-31-58-193]      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

[ip-172-31-58-193]      at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)

[ip-172-31-58-193]      at com.test.my.promotion.controller.PromotionRakebackAchievementController$$EnhancerBySpringCGLIB$$4ccc77c2.setPromotionRakebackAchievementOptedIn(<generated>)

[ip-172-31-58-193]      at sun.reflect.GeneratedMethodAccessor516.invoke(Unknown Source)

[ip-172-31-58-193]      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

[ip-172-31-58-193]      at java.lang.reflect.Method.invoke(Method.java:498)

[ip-172-31-58-193]      at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)

[ip-172-31-58-193]      at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)

[ip-172-31-58-193]      at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)

[ip-172-31-58-193]      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)

[ip-172-31-58-193]      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)

[ip-172-31-58-193]      at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)

[ip-172-31-58-193]      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)

[ip-172-31-58-193]      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)

[ip-172-31-58-193]      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)

[ip-172-31-58-193]      at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:883)

[ip-172-31-58-193]      at javax.servlet.http.HttpServlet.service(HttpServlet.java:664)

[ip-172-31-58-193]      at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)

[ip-172-31-58-193]      at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)

[ip-172-31-58-193]      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)

[ip-172-31-58-193]      at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)

[ip-172-31-58-193]      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)

[ip-172-31-58-193]      at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89)

[ip-172-31-58-193]      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)

[ip-172-31-58-193]      at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)

[ip-172-31-58-193]      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)

[ip-172-31-58-193]      at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)

[ip-172-31-58-193]      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)

[ip-172-31-58-193]      at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:117)

[ip-172-31-58-193]      at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:61)

[ip-172-31-58-193]      at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:92)

[ip-172-31-58-193]      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

[ip-172-31-58-193]      at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:110)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

[ip-172-31-58-193]      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)

[ip-172-31-58-193]      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)

[ip-172-31-58-193]      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

[ip-172-31-58-193]      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)

[ip-172-31-58-193]      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)

[ip-172-31-58-193]      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)

[ip-172-31-58-193]      at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)

[ip-172-31-58-193]      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)

[ip-172-31-58-193]      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)

[ip-172-31-58-193]      at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)

[ip-172-31-58-193]      at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

[ip-172-31-58-193]      at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)

[ip-172-31-58-193]      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)

[ip-172-31-58-193]      at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

[ip-172-31-58-193]      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

[ip-172-31-58-193]      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

[ip-172-31-58-193]      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

[ip-172-31-58-193]      at java.lang.Thread.run(Thread.java:745) 


아무런 정보 없이 계속 생겼고 소스를 확인해 보았다.

Request Body Parameters

 @Data

@ApiModel(value = "TestRakebackAchievementForm.OptedIn")

public static class OptedIn {
private String playerId;

@NotNull
private BigDecimal completeAmount;

private BigDecimal stepAmount;

@Digits(integer = 10, fraction = 2)
private BigDecimal bonusAmount;

private Integer expiryDays;

}


원인 @Digits(integer = 10, fraction = 2)

해당 설정보다 큰 숫자가 들어와서 생긴 오류였다.

저걸 지워주니 잘 됐음..왜지...

http://napsis.blog.me/221426306023

'개발 > JAVA' 카테고리의 다른 글

google sheet + java + maven  (0) 2019.02.10
Comparator 간단하게 이용하기  (0) 2019.02.05
Java8 함수형  (0) 2018.09.19
Math.random()  (0) 2018.08.07
null 대신 Optional  (0) 2018.07.07

+ Recent posts