1. ResponseStatus는 Controller나 Exception에 사용하여 status 정보를 설정하여 리턴해 준다. * Marks a method or exception class with the status {@link #code} and * {@link #reason} that should be returned. * The status code is applied to the HTTP response when the handler * method is invoked and overrides status information set by other means, * like {@code ResponseEntity} or {@code "redirect:"}. 2. @ExceptionHandler..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bYg2uL/btqGkVdc7eh/GOBxh6Ux9BWbnbwxhE1wIK/img.png)
1. 스프링 formatter는 특정 타입의 객체를 문자열로 반대로 문자열을 특정타입의 객체로 변환할 때 사용한다. 1-1 즉 String과 Object 사이의 변환을 해준다. 2. Converter는 Object, Object 간의 변환을 해준다. 2-1 converter 인터페이스는 source, target 두 개의 generic을 제공해야 하고 2-2 formetter는 하나의 target만 제공하면 된다. 3. 스프링 부트의 경우는 @Component로 지정하면 자동으로 로딩되어 사용된다. 4. 간단한 예제 4-1 아래는 타임리프 템플릿이다. 4-1-1 아래는 애완동물을 생성하기 위한 form인데 여기에 petType이라는 것을 설정해야 한다. 4-1-1-1 Set에 여러 개의 PetType이 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cAubDT/btqGitB9xMb/dklDhhK6Oq2bvgMvBR75M0/img.png)
1. 파일 업로드를 위해서 우선 파일을 선택할 template이 필요하다. 1-1 아래는 thymeleaf로 작성된 form으로 중요한 부분은 form 테그 부분이다. 1-2 input type이 file이고 전송될 파일의 이름은 name에 지정된 imageFile이 된다. 1-3 파일이므로 post로 메소드를 설정하고 전송할 action에는 파일을 수신처리할 url을 지정한다. Upload a new recipe image Select File Submit 1-4 실행화면 2. 파일을 전송하였으면 수신할 controller가 필요하다. 2-1 아래의 ImageController에는 3가지 메소드가 있다. 2-2 showUploadImageForm 메소드는 이미지를 선택할 ui template을 보내준다..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/YgKMg/btqGebPtRyB/ErwiWOs7OXzPVTH7KSFkd1/img.png)
1. 한번씩 Enumeration의 리스트를 바로 사용하면 편리한 경우가 있다. 2. 아래 경우처럼 th:each에 T를 사용하여 값을 가지고 올 수 있다. 2-1 받아 온 변수에서 name()를 사용하여 이름을 가져올 수 있다. 2-2 difficulty 변수에 들어있는 값이 자동으로 selected로 지정된다. Difficulty: val 3. 결과 화면 3-1 Difficulty Enum package pe.pilseong.recipe.domain; public enum Difficulty { EASY, MODERATE, DIFFCULT }
1. 테스트를 하다 보면 언제 any, anyLong 같은 값을 사용할지 아니면 진짜 값을 넣어주어야 할지 혼란스럽다. 2. 아래 같은 유닛테스트의 경우는 모두 any, anyLong을 사용하고 있다. 2-1 예제는 Service 구현한 클래스를 테스트하는 것으로 2-2 Mockito fixture로는 repository나 conveter를 사용하고 있다. 2-3 fixture가 반환해야 할 값들을 세팅할 때 when을 사용하는데 여기의 인자들은 모두 any 계열을 사용한다. package pe.pilseong.recipe.service; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/GCZtH/btqGrilVtdZ/fUb8hQ01Bt1b0uUODMhJi1/img.png)
1. Bootstrap4는 3버전과 비교하면 많은 부분이 변경되었다. 특히 has-error, help-block이 삭제되었다. 2. 아래의 예시에서 중요한 부분은 아래 부분인데 2-1 컨트롤러의 ResultBiding에 담은 에러가 #fields로 연결되어 #fields.hasErrors로 체크할 수 있다. 2-1-1 '*' 은 어떤 경우라도 에러가 존재하는 경우를 찾기 위한 것이다. 2-1-2 pb-0는 부트스트랩 4 alert의 bottom padding 1rem으로 잡혀있어서 제거해주는 것이 보기 좋다. 2-2 개별적으로 에러를 처리하는 부분인데 2-2-1 2-1과 동일하게 fields.hasErrors로 체크할 수 있는데 특정한 속성을 넣어서 체크할 수 있다. 2-2-2 th:class의 경우는..
1. 아래의 코드는 JUnit 4를 기반한 코드이다. 2. 통합 테스트의 경우 실제 컨텍스트가 필요하기 때문에 @SpringBootTest가 필요하다. 2-1 @RunWith만으로는 전체 스프링 컨텍스트가 기동하지 않기 때문에 Service가 주입되지 않는다. 3. 테스트 컨텍스트를 기동하기 위하여 @RunWith(SpringRunner.class) 가 필요하다. 3-1 없으면 테스트용 컨텍스트가 생성되지 않아 기동 자체가 되지 않는다. 4. testSaveOfDescpriton 테스트의 @Transactional은 필수다. 4-1 없는 경우, 스프링 컨텍스트 밖에서 실행하므로 Session을 찾을 수가 없다. package pe.pilseong.recipe.service; import static or..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cHgLbC/btqGdzPEAQi/9jiznLpKzH5LgaM6J97oE1/img.png)
1. maven 은 webjar을 지원하고 있는데, bootstrap과 jquery가 가장 많이 사용된다. 2. boostrap maven import를 찾아보면 아래의 코드가 들어가는데 mav repository에서 dependency를 찾아보면 2-1 아래와 같이 bootstrap이 jqeury와 popper가 의존하고 있음을 알 수 있다. 2-2 둘다 자동으로 dependency가 추가되어 별도의 webjar을 받을 필요가 없다. 2-3 받는다고 하더라도 version은 설정하지 않는 것이 좋다. 2-4 사용 전에 항상 의존성을 확인하여 어떤 버전을 사용하는지 확인 후 html에 반영해야 한다. org.webjars bootstrap 4.5.0 2-4 실제 의존 구조 캡처 3. pom 파일 4.0...
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- one-to-one
- crud
- Security
- XML
- 로그인
- one-to-many
- 스프링부트
- Validation
- 외부파일
- Many-To-Many
- spring boot
- Spring Security
- Spring
- WebMvc
- 상속
- MYSQL
- form
- jsp
- RestTemplate
- mapping
- login
- Angular
- 설정
- 하이버네이트
- 스프링
- 자바
- hibernate
- 설정하기
- Rest
- 매핑