728x90
반응형

IT/자바, 스프링 46

자바 코드에서 오라클 oci 인스턴스 생성하기

스프링 부트에서 오라클 클라우드 oci의 인스턴스 생성을 명령해보자 1. 인스턴스 생성 @Override public Instance createInstance(String domain) { /* 인스턴스 디테일 설정 */ LaunchInstanceDetails launchInstanceDetails = LaunchInstanceDetails.builder() .availabilityDomain("...") .compartmentId("...") .shape("VM.Standard.E3.Flex") .displayName(domain) .createVnicDetails(CreateVnicDetails.builder() .subnetId("...") .build()) .metadata(new HashMap..

스프링 부트에서 비동기로 작업하기

request로 들어온 요청을 처리하는데 시간이 오래 걸리는 작업이 있을 경우 응답을 보내주는 데 수분에서 수십분이 걸린다면 사용자 입장에서는 답답함을 느끼고 서비스를 이용하지 않을 수 있다. 따라서 시간이 오래 걸리는 작업은 우선 응답을 바로 보내주고 시간이 오래 걸리는 작업은 다른 스레드에서 비동기로 처리하고자 한다. 스프링 부트에서는 @Async 어노테이션을 통해 비동기 작업을 처리할 수 있다. @Async를 사용하기에 앞서 설정파일을 만들어줘야 한다. @Configuration @EnableAsync public class AsyncConfig extends AsyncConfigurerSupport { @Override public Executor getAsyncExecutor(){ ThreadP..

스네이크 케이스로 들어온 필드명을 카멜 케이스로 받기

{ "user_mail": "test@mail.com" } 프론트나 웹에서는 주로 스네이크 케이스를 사용하지만 자바에서 변수명은 대개 카멜케이스를 사용한다 스네이크 케이스로 들어오는 변수 이름을 카멜케이스로 받고자 할 때 @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) public class SignUpBusinessRequest { private String userEmail; } 이렇게 @JsonNaming 어노테이션을 써소 네이밍전략을 설정해주면 알아서 언더바를 대문자로 변환해서 받아줌 단 dto를 이렇게 설정해놓고 프론트에서 user..

스프링 프로젝트 api에 context path 설정하기 ( /api/v1 )

설정하는 이유 api 경로에 뎁스 하나를 파서 루트를 잡아두면 프론트쪽에서 프록시 처리하기 좋다고 함 모든 컨트롤러에 다 설정해줄 수 없으니 yaml 파일에 설정 appilcation.yaml server: servlet: context-path: /api/v1 yaml이 아닌 properties 사용시 그냥 줄바꿈만 없애고 점찍으면 됨 appplication.properties server.servlet.context-path=/api/v1 그럼 아래같이 부르던 api가 - http://domain:8080/user - http://domain:8080/menu 아래처럼 됨 - http://domain:8080/api/v1/user - http://domain:8080/api/v1/menu

자바 string에서 boolean 변환하기

Boolean. 까지 치니까 getBoolean이란 게 보이길래 아무생각없이 썼는데 얘 아님... parseBoolean 또는 valueOf를 써야 함 Boolean.parseBoolean(str) // 또는 Boolean.valueOf(str) 대소문자는 상관없지만. true가 아니면 모두 false로 나옴 주의 (parseBoolean, valueOf 동일) Boolean.parseBoolean("true") --> true Boolean.parseBoolean("TRUE") --> true Boolean.parseBoolean("TruE") --> true Boolean.parseBoolean("false") --> false Boolean.parseBoolean("asdfd") --> false

URL Decoder (퍼센트 인코딩 되돌리기)

%EC%9D%B8%EC%BD%94%EB%94%A9 위처럼 %d하나와 숫자 두개씩 나타나는 포맷이 url 인코딩된 형태임 퍼센트 인코딩이라고도 하는 듯 숫자나 영어는 건드리지 않고 한글만 바꿈 인코딩decode333 -> %EC%9D%B8%EC%BD%94%EB%94%A9decode333 간단하게는 아래 사이트에서 돌려볼 수 있음 https://meyerweb.com/eric/tools/dencoder/ 자바에서는 URLDecoder를 써서 바꾸면 됨 String getOriginString = URLDecoder.decode(encodedString, "UTF-8"); 이때 URLDecoder.decode(...) 와 같이 decode에 취소선이 그어지면서 deprecated 됐다고 나오면 뒤에 "UTF-..

데이터 검증을 스프링에서 하지 않고 db로 넘겨주기

DeviceServiceImp.java // 빈 채널을 찾아서 기기 등록 (빈 채널이 없으면 익셉션) List channelList = channelRepository.findAllByStoreId(store.getId()); Boolean fullDevice = true; for(Channel channel : channelList){ if(channel.getDevice()==null){ channel.setDevice(device); channelRepository.save(channel); fullDevice = false; break; } } if(fullDevice){ throw new FullDeviceException(); } 위처럼 구구절절 포문 돌려서 하던 로직을 db로 넘겨주기 ↓↓↓..

Spring Security에서 컨트롤러 메서드 별 권한 지정 (@Secured, @PreAuthorize)

원래 antMatchers로 지정하던 권한 @Secured와 @PreAuthorize 어노테이션으로 그자리에서 지정하기 기존 @RequiredArgsConstructor @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception{ http //... .and() .authorizeRequests() .antMatchers("/auth/test").hasRole("USER")// 이렇게 config에서 모아서 지정하는 방식 .anyRequest().permitAll() // ... } }..

쿠키 생성, 삭제

쿠키 만들기 @PostMapping("/test") public String test(HttpServletRequest request, HttpServletResponse response){ Cookie testCookie= new Cookie("testCK", "asdf"); testCookie.setPath("/"); testCookie.setMaxAge(60*60*24*15); //시간 0으로 하면 쿠키삭제 //시간 -1로 하면 쿠키 계속보존 // 만든 쿠키는 response에 담아서 보내줌 response.addCookie(testCookie); return "ok"; } 쿠키 지우기 @PostMapping("/test") public String test(HttpServletRequest req..

300x250
반응형