728x90
반응형
1) 유효성 체크를 위한 Validation API 사용 - 사용자가 입력한 데이터에 대한 유효성 체크 @Valid
// User
import lombok.AllArgsConstructor;
import lombok.Data;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import java.util.Date;
@Data
@AllArgsConstructor
public class User {
private Integer id;
@Size(min=2)
private String name;
// 과거 데이터 제약 조건
@Past
private Date joinDate;
}
// UserController
// @Valid 어노테이션 추가
// 새로운 사용자를 등록하는 method 구현
@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user){
User savedUser = service.save(user);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).build();
}
// CustomizedResponseEntityExceptionHandler
// 사용자가 입력한 값에 문제가 생겼을 때 사용하는 예외 메소드 재정의
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(),
ex.getMessage(),ex.getBindingResult().toString());
return new ResponseEntity(exceptionResponse,HttpStatus.BAD_REQUEST);
}
// CustomizedResponseEntityExceptionHandler
// 사용자가 입력한 값에 문제가 생겼을 때 사용하는 예외 메소드 재정의
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(),
"Validation Failed",ex.getBindingResult().toString());
return new ResponseEntity(exceptionResponse,HttpStatus.BAD_REQUEST);
}
// User
@Size(min=2, message = "Name은 2글자 이상 입력해주세요.")
private String name;
2) 다국어 처리를 위한 Internationalization 구현 방법
다국어 처리 : 하나의 출력 값을 여러 가지 언어로 표시해주는 기능 (제공하고자하는 언어별로 지역코드, 언어 설정에 따라 적절하게 표시) - 특정 Controller에 한해서가 아니라 Project 전반적으로 적용 |
- 다국어 처리에 필요한 bean을 Spring Boot Application에 등록(@SpringBootApplication 어노테이션을 가지고 있는 클래스)
- @bean을 등록하게 되면 SpringBoot가 초기화될 때, 해당 빈에 해당하는 정보가 메모리에 같이 등록된다.
package com.example.restfulwebservice;
import org.apache.tomcat.util.descriptor.LocalResolver;
import org.hibernate.Session;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
@SpringBootApplication
public class RestfulWebServiceApplication {
public static void main(String[] args) {
SpringApplication.run(RestfulWebServiceApplication.class, args);
}
@Bean
public LocaleResolver localeResolver(){
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.KOREA);
return localeResolver;
}
}
- application.yml 에 사용할 다국어파일 등록하기
# 사용할 다국어 파일명을 messages로 사용한다는 의미
spring:
messages:
basename: messages
- Resource에 다국어 파일(properties) 생성
// messages.properties
greeting.message=안녕하세요
// messages_en.properties
greeting.message=Hello
// messages_fr.properties
greeting.message=Bonjour
- Controller에 메세지 주입
// HelloWorldController
// 어노테이션을 통한 의존성 주입
@Autowired
private MessageSource messageSource;
@GetMapping(path="/hello-world-internationalized")
public String helloWorldInternationalize(
@RequestHeader(name="Accept-Language", required = false)
Locale locale)
{
return messageSource.getMessage("greeting.message",null,locale);
}
728x90
반응형