WEB

    [Spring] 스프링 공부 #32

    스프링 타입 컨버터 org.springframework.core.convert.converter.Converter 인터페이스의 convert메서드를 활용해서 타입을 변환할 수 있다. @Slf4j public class StringToIntegerConverter implements Converter { @Override public Integer convert(String source) { log.info("convert source={}", source); return Integer.valueOf(source); } } @Slf4j public class IntegerToStringConverter implements Converter { @Override public String convert(Int..

    [Spring] 스프링 공부 #31

    Servlet에서의 예외처리 서블릿은 Exception이 발생해서 서블릿 밖으로 전달되거나, response.sendError()가 호출됭었을때 설정된 오류 페이지를 찾는다. 컨트롤러에서 예외가 발생하여 WAS로 전파되고, 다시 WAS에서 내부적으로 '/error-page/500'을 다시 요청하게 된다. 이렇게 처리하게 되면, 필터와 인터셉터가 중복으로 호출되는 문제가 발생한다. => 필터는 DispatchType을 사용해서, 인터셉터는 excludePatterns("/error-page/**")를 사용해서 중복을 제거할 수 있다 Spring에서의 예외처리 resources/templates/error 디렉토리에 오류 출력 뷰 파일을 넣어준다. @Controller public class ServletE..

    [Spring] 스프링 공부 #30

    Servlet Filter 사용해서 인증체크 Servlet Filter란? 공통적인 기능을 서블릿이 호출되기 전 혹은 호출되고 난 뒤에 수행하기 위해서 사용한다. 사용자 인증이나, 로깅과 같은 공통 기능들을 처리하기 위해서 사용한다. LoginFilter - 로그인 필터 @Slf4j public class LoginCheckFilter implements Filter { private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"}; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain ..

    [Spring] 스프링 공부 #29

    로그인 쿠키 처리 //쿠키에 시간 정보를 주지 않으면 세션 쿠키(브라우저 종료시 모두 종료) Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(idCookie); @GetMapping("/") public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model) { if (memberId == null) { return "home"; } //로그인 Member loginMember = memberRepository.findById(memberId); if (loginMe..

    [Spring] 스프링 공부 #28

    Bean Validation 이란? Bean Validation 2.0이라는 기술(JSR-380)이라는 기술표준으로, 검증로직을 공통화 하고 표준화한 기술이다. 검증 애노테이션과 여러 인터페이스의 모음으로 애노테이션을 이용해서 검증 기능을 사용할 수 있게 해준다. Hibernate Validator 구현체로 구현되어 있지만, ORM과는 관련이 없다. @Data public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 100000) private Integer price; @NotNull @Max(9999) private Integer quantity; public Item(..

    [Spring] 스프링 공부 #27

    BindingResult.addError 사용방법 errors.properties required.item.itemName=상품 이름은 필수입니다. range.item.price=가격은 {0} ~ {1} 까지 허용합니다. max.item.quantity=수량은 최대 {0} 까지 허용합니다. totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1} @PostMapping("/add") public String addItemV3( @ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes ) { //검증 로직 if (!StringUtils.hasText(item...

    [Spring] 스프링 공부 #26

    검증 직접 처리 고객이 상품 등록 폼에서 요구사항에 맞지 않는 데이터를 입력하면, 서버 검증 로직이 실패해야 한다. 실패한 뒤에는 상품 등록 폼과 함께 검증 오류 이유를 알려주어야 한다. 상품 등록 검증 로직(Controller) @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors = new HashMap(); //검증 로직 if (!StringUtils.hasText(item.getItemName())) { errors.put("itemName", "상품 이름은 필수입니다."); } if ..