일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 알고리즘
- 자바
- Spring Boot
- Greedy
- 인프런
- java
- Proxy
- 김영한
- Exception
- springdatajpa
- db
- Servlet
- pointcut
- 백준
- 스프링 핵심 기능
- 그리디
- AOP
- QueryDSL
- JPQL
- spring
- http
- kotlin
- jpa
- 스프링 핵심 원리
- Android
- SpringBoot
- 스프링
- transaction
- JDBC
- Thymeleaf
- Today
- Total
목록인프런/[인프런] 스프링 MVC 2 (102)
개발자되기 프로젝트
Converter 는 입력과 출력 타입에 제한이 없는, 범용 타입 변환 기능을 제공 하지만 개발자는 문자를 다른 타입으로 변환하거나, 다른 타입을 문자로 변환하는 상황이 대부분이다. 문자를 다른 객체로 변환하거나 객체를 문자로 변환하는 일이 많음. 1. Web Application에서 객체 -> 문자, 문자 -> 객체 변환 예 화면에 숫자를 출력 Integer -> String 출력 시점에 숫자 1000 -> 문자 "1,000" 이렇게 1000 단위에 쉼표를 넣어서 출력하거나 또는 "1,000" 라는 문자를 1000 이라는 숫자로 변경해야 한다. 날짜 객체를 문자인 "2021-01-01 10:50:11" 와 같이 출력하거나 또는 그 반대의 상황 Locale 여기에 추가로 날짜 숫자의 표현 방법은 Loca..
Thymeleaf에 Converter를 적용해보자. 1. Controller @Controller public class ConverterController { @GetMapping("/converter-view") public String converterView(Model model){ model.addAttribute("number", 10000); model.addAttribute("ipPort", new IpPort("127.0.0.1", 8080)); return "converter-view"; } } 2. converter-view.html ${number}: ${{number}}: ${ipPort}: ${{ipPort}}: 기존과는 다르게 ${{...}}가 있다. ${number}: ${{..
1. Spring에 Converter 등록 addFormatters() 이용 @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringToIntegerConverter()); registry.addConverter(new StringToIpPortConverter()); registry.addConverter(new IntegerToStringConverter()); registry.addConverter(new IpPortToStringConverter()); } }..
1. ConversionService 개별 컨버터를 모아두고 그것들을 묶어서 편리하게 사용할 수 있는 기능 package org.springframework.core.convert; import org.springframework.lang.Nullable; public interface ConversionService { boolean canConvert(@Nullable Class sourceType, Class targetType); boolean canConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType); T convert(@Nullable Object source, Class targetType); Object conver..
타입 컨버터를 사용하려면 org.springframework.core.convert.converter.Converter 를 구현 ㅋㅋㅋㅋ Converter라는 인터페이스가 너무 많음.. 조심 ㅎㅎ 1. String -> Integer import lombok.extern.slf4j.Slf4j; import org.springframework.core.convert.converter.Converter; @Slf4j public class StringToIntegerConverter implements Converter { @Override public Integer convert(String source) { log.info("convert source= {}", source); return Integer..
1. ex) 문자 -> 숫자 @RestController public class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request){ String data = request.getParameter("data"); //문자 타입 조회 Integer integer = Integer.valueOf(data); //숫자 타입으로 변경 System.out.println("integer = " + integer); return "ok"; } } 분석 localhost:8080/hello-v1?data=10 String data = request.getParameter("data") HTTP 요청 파라미..
@ExceptionHandler 를 사용해서 예외를 깔끔하게 처리할 수 있게 되었지만, 정상 코드와 예외 처리 코드가 하나의 컨트롤러에 섞여 있다. @ControllerAdvice 또는 @RestControllerAdvice 를 사용하면 둘을 분리할 수 있다. 1.@ControllerAdvice Controller에 있던 오류 처리 코드를 분리해 내자. @RestControllerAdvice를 적용한 ExControllerAdvice 클래스를 생성하여 코드를 여기로 옮겨놓자. 그러면 여러 controller에서 발생한 Exception을 ControllerAdvice에서 처리해줌. @Slf4j @RestControllerAdvice public class ExControllerAdvice { @Respo..
1. HTML 화면 오류 & API 오류 웹 브라우저에 HTML 화면을 제공할 때는 오류가 발생하면 BasicErrorController 사용이 편함 이때는 단순히 5xx, 4xx 관련된 오류 화면을 보여주면 된다. BasicErrorController 는 이런 메커니즘을 모두 구현해둠. 그런데 API는 각 시스템 마다 응답의 모양도 다르고, 스펙도 모두 다르다. 예외 상황에 단순히 오류 화면을 보여주는 것이 아니라, 예외에 따라서 각각 다른 데이터를 출력해야 할 수도 있다. 그리고 같은 예외라고해도 어떤 컨트롤러에서 발생했는가에 따라서 다른 예외 응답을 내려주어야 할 수 있다. 즉 세밀한 제어가 필요하다. 2. API예외 처리의 어려운 점. HandlerExceptionResolver 를 떠올려 보면 ..