Web/Spring
form(submit) 에러처리 form을 사용해 데이터를 submit을 하려할때 @valid를 통해 검증이 되지 않으면 BindingResult에 에러 정보가 담긴다고 했는데, 이 에러를 view를 통해 띄워주는 방법에 대해 알아보겠습니다. // Handler @PostMapping("/events") public String createEvent(@Validated @ModelAttribute Event event, BindingResult bindingResult, Model model) { // 바인딩 에러가 발생하면 /events/form으로 요청이 보내진다. if(bindingResult.hasErrors()) { return "/events/form"; } // Post -> Redirect..
@Valid 바인딩을 한 뒤 값에 대한 검증을 하기위해서는 @Valid 또는 @Validated를 사용하면 된다. // Handler @PostMapping("/events") @ResponseBody public Event getEvent(@Valid @ModelAttribute Event event, BindingResult bindingResult) { if(bindingResult.hasErrors()) { System.out.println("====================="); bindingResult.getAllErrors().forEach(c -> { System.out.println(c.toString()); }); } return event; } // Event Class publ..
@ModelAttribute @RequestMapping에서 Map을 사용해서 name과 limit을 한번에 받아와서 하나의 객체로 만들었었다. 반면 @ModelAttribute는 만들어져있는 Event라는 객체로 받아올 수 있게해주는 애노테이션이다. 생략이 가능하지만 가독성을 위해 써주는게 좋을 것 같다. // Handler @PostMapping("/events") @ResponseBody public Event getEvent(@ModelAttribute Event event) { return event; } // Test Code @Test public void postEvent() throws Exception { mockMvc.perform(post("/events") .param("name"..
Thymeleaf 간단 사용법 html파일안의 태그 안에 속성을 추가해준다. xmlns:th="http://www.thymeleaf.org" thymeleaf의 표현식 @{} : URL을 표현하는 식 ${} : variable을 표현하는 식 *{} : selection 표현식 참고 : https://www.thymeleaf.org/doc/articles/standarddialect5minutes.html thymeleaf를 활용하여 form만들어보기 @Controller public class SampleController { @GetMapping("/events/form") public String eventsForm(Model model) { // "event"라는 이름으로 새로운 event객체를 넘..
@RequestMapping 요청 매개변수 (하부항목에 설명)에 있는 단순 타입의 데이터를 argument로 받는 방법. 요청 매개변수에는 '쿼리 매개변수', '폼 데이터'가 있다. 쿼리 매개변수는 /events?name=hooong 와 같이 uri에 ?뒤에 더해지는 매개변수이고, 폼 데이터는 말그대로 태그 안에서 넘어오는 매개변수들을 말한다. Type Conversion 지워 값이 반드시 있어야 한다. ( required옵션과 Optional을 사용하여 설정을 바꿀 수도 있다.) Map을 사용해서 받아올 수도 있다. 그러나 그냥 하나하나 받아오는게 편할 수 있다. @PostMapping("/events") @ResponseBody public Event getEvent(@R..
@PathVariable request uri패턴에서 일부를 argument로 받는 방법. Uri 패턴에서 이름과 argument의 이름이 다를경우 ()안에 명시해준다. @PathVariable("id") Integer idvalue type conversion을 알아서 해준다. (String으로 받은 id값이 integer로 변환될 수 있다.) 값이 반드시 있어야 한다. (required = false)옵션으로 바꿀 수 있긴하다. Optional을 지원한다. (@PathVariable Optional id) 사용예제 @GetMapping("/events/{id}") @ResponseBody public Event getEvent(@PathVariable Integer id) { Event event =..
Meta Annotation 애노테이션에 사용할 수 있는 애노테이션 Composed Annotation 하나 또는 여러개의 메타 애노테이션을 조합해서 만든 애노테이션 코드가 간결해지고 보다 구체적인 의미를 부여할 수 있음. @GetHelloMapping @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @RequestMapping(method = RequestMethod.GET, value = "/hello") public @interface GetHelloMapping { } @Retention 해당 애노테이션 정보를 언제까지 유지할 것인지를 설정하는 애노테이션 @Retention(RetentionPolicy.SOUR..
직접 구현하지 않아도 spring web mvc에서 자동으로 처리하는 http 메서드로 아래 OPTIONS테스트 결과를 보면 HEAD와 OPTIONS를 만들지 않았어도 Allows에 포함되어 있는 것을 확인할 수 있으. HEAD GET과 동일하지만 body (즉, 응답본문)을 제외하고 응답 헤더만 받는다. @Test public void holloTest() throws Exception { mockMvc.perform(head("/hello")) .andDo(print()) .andExpect(status().isOk()); } /** 원래는 return으로 "hello"를 반환하지만 Body가 비어있는 것을 확인할 수 있다. MockHttpServletResponse: Status = 200 Erro..
특정 타입의 데이터를 담고있는 요청만 처리하는 Handler (content-type 헤더로 필터링) // Json타입을 가지고 있는 요청만 처리 @Controller public class SampleController { @GetMapping( value = "/hello", consumes = MediaType.APPLICATION_JSON, ) @ResponseBody public String hello() { return "hello"; } } 매치되지 않는 경우에 415 (Unsupported Media Type) 뱉음. 특정한 타입의 응답을 만드는 핸들러 (accept 헤더로 필터링) // Plain Text를 만들어내는 핸들러 @Controller public class SampleCont..