업데이트 :: 2018.08.dd
요청 데이터 취득
- 경로 변수 값 취득
- @PathVariable을 사용해 특정 경로 변수 값을 취득
- 요청 파라미터 값 취득
- @RequestParam을 사용해 특정 요청 파라미터 값을 취득
- 요청 해 더 값 취득
- @RequestHeader를 사용해서 특정 요청 해더값을 취득
- 쿠기 값 취득
- @CookieValue를 사용해서 쿠기값을 취득
- 요청 파라미터 값 일괄취득
- 폼 클래스라 불리는 자바빈즈를 사용해 요청 파라미터를 자바빈즈 프로퍼티에 바인딩해서 취득
경로변수값 (@PathVariable)
@RequestMapping(path="accounts/{accountId}", method=RequestMethod.GET) public String detail(@PathVariable String accountId) { }
- value(path) 속성에 경로변수({변수명})를 선언
- 경로변수값을 취득할 인수에 @PathVariable를 지정
요청파라미터값 (@RequestParam)
@RequestMapping(path="detail", method=RequestMethod.GET) public String detail(@RequestParam String format) { }
- 요청파라미터는 취득하는 인수에 @RequestParam을 지정
- format이라는 이름(인수명)에 일치하는 파라미처 값으로 설정
@RequestParam, @RequestHeader, @CookieValue
- value
- 값을 취득하는 파라미터명을 지정
- 생략하는 경우에는 인수명이 파라미터명으로 적용
- name
- value 속성의 별명
- required
- 파라미터의 필수 여부를 지정
- 생략한 경우에 true(필수)가 적용
- 파라미터가 존재하지 않는 경우에 ServletRequestBindingException 발생, 400(Bad Request) 취급
- defaultValue
- 파라미터가 존재하지 않는 경우(또는 파라미터가 공백인 경우)에 적용하는 기본값지정
- 기본값을 지정한 경우 required 속성을 강제적으로 false
@RequestMapping(path="accounts", method=RequestMethod.GET) public String cart( @CookieValue("example.springbook.cartId") String cartId, @RequestHeader(name="X-Track-Id", required=false) String trackingId, @RequestParam(defaultValue=1) Integer page ) { }
- required=false 대신 javaSE8에서 추가된 Optional 사용가능
@RequestMapping(path="accounts", method=RequestMethod.GET) public String cart( @CookieValue("example.springbook.cartId") String cartId, @RequestHeader(name="X-Track-Id") Optional<String> trackingId, @RequestParam(defaultValue=1) Integer page ) { }
컴파일옵션과 주의점
@PathVariable, @RequestParam, @RequestHeader, @CookieValeu의 value(name) 속성을 생략하고 싶다면
컴파일할때 -g 옵션 (디버깅정보를 출력하는 모드)
또는, javaSE8에서 추가된 -parameters 옵션(메서드 또는 파라미터에 리플렉션용 메타데이터를 생성하는 모드)를 사용
이용가능타입
- 기본형 (int, boolean 등등) 및 래퍼타입(Integer, Boolean 등등)
- 값을 표현하는 타입 (String, Data 등등)
- MultipartFile
- 요청데이터는 컬랙션이나 배열로 취득할 수있음
- WebDataBinder 클래스 메소드를 통해 확장할 수 있음
WebDataBinder
- 바인딩 처리의 커스터마이징
- addCustomFormatter
- Formatter 인터페이스를 구현해서 문자열을 임의의 타입으로 변환
- registerCustomEditor
- PropertyEditor 인터페이스를 구현해서 문자열을 임의의 타입으로 변환
@InitBinder 클래스
@InitBinder public void initBinder (WebDataBinder binder) { }
- @InitBinder가 붙은 클래스 구현
- 스프링 MVC요청데이터의 바인딩을 수행하기전에 @InitBinder이 붙은 메서드 호출
addCustomFormatter()
@InitBinder public void initBinder(WebDataBinder binder) { binder.addCustomFormatter(new DateFormatter("yyyyMMdd")); }
registerCustomEditor()
@InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); }
특정 파라미터에 대해서만 커스텀 구현을 적용하는 예
@RequestMapping(path="search", method=RequestMethod.GET) public String search(@RequestParam targetData, Model model) { } @InitBinder public void initBinder(WebDataBinder binder) { binder.addCustomFormatter(new DataFormatter("yyyyMMdd"), "targetDate"); } // OR @InitBinder("targetDate") public void initBinder(WebDataBinder binder) { binder.addCustomFormatter(new DateFormatter("yyyyMMdd")) }
애너테이션 사용 포맷지정
- 파라미터 마다 '숫자'와 '날짜' 포맷을 지정할 때는 두 애너테이션을 사용해 직관적으로 파악
- DateTimeFormat
- 날짜/시간 포맷을 지정하기 위한 애너테이션
- NumberFormat
- 숫자나 통화 포맷을 지정하기 위한 애너테이션
- DateTimeFormat
폼클래스를 지정한예
public class AccountCreateForm implements Serializable { @DateTimeFormat(pattern="yyyyMMdd") private Date dateOfBrith; }
핸들러 메서드의 인수로 지정한예
@RequestMapping(path="search", method=RequestMethod.GET) public String search( @DateTimeFormat(pattern="yyyyMMdd") @RequestParam targetDate, Model model )
Created by MoonsCoding
e-mail :: jm921106@gmail.com
반응형
'Spring > WEB' 카테고리의 다른 글
학습 // Spring // WEB // 화면이동 (0) | 2018.08.20 |
---|---|
학습 // Spring // WEB // Validation (0) | 2018.08.20 |
학습 // Spring // WEB // Form DataBinding Class (0) | 2018.08.20 |
학습 // Spring // WEB // RequestMapping (0) | 2018.08.20 |
학습 // Spring // WEB // controller (0) | 2018.08.20 |