Spring MVC 의@RequestMapping 상세 설명

6103 단어 Java문장
머리말:
이전 프로젝트 에 서 는 REST 스타일 로 프로그램 을 개발 하 였 으 나 POST,PUT 모드 로 데 이 터 를 제출 하 였 을 때 서버 측 에서 제출 한 데 이 터 를 받 아들 이지 못 하 는 것 을 발견 하 였 으 며,제출 방식 은 application/json 이 며,서버 측 에서 request.getReader()를 통 해 나 온 데이터 에는 브 라 우 저가 제출 한 데이터 가 확실히 존재 하 는 것 을 확인 하 였 다.원인 을 찾기 위해 매개 변수 바 인 딩(@RequestParam,@RequestBody,@RequestHeader,@PathVariable)에 대해 연 구 했 고 HttpMessageConverter 와 관련 된 내용 도 살 펴 보 았 습 니 다.
프로필:
@RequestMapping
RequestMapping 은 요청 주소 맵 을 처리 하 는 주석 으로 클래스 나 방법 에 사용 할 수 있 습 니 다.클래스 에 사용 할 때 클래스 의 모든 응답 요청 을 표시 하 는 방법 은 이 주 소 를 부모 경로 로 합 니 다.
RequestMapping 주 해 는 여섯 가지 속성 이 있 습 니 다.다음은 세 가지 유형 으로 나 누 어 설명 하 겠 습 니 다.
1、 value, method;
value:     요청 한 실제 주 소 를 지정 합 니 다.지정 한 주 소 는 URI Template 모드 일 수 있 습 니 다.
method:  요청 한 method 형식,GET,POST,PUT,DELETE 등 을 지정 합 니 다.
2、 consumes,produces;
consumes:요청 한 제출 내용 형식(Content-Type)을 지정 합 니 다.예 를 들 어 application/json,text/html;
produces:    되 돌아 오 는 콘 텐 츠 형식 을 지정 합 니 다.request 요청 헤더 에 있 는(Accept)형식 에 만 지정 한 형식 이 포함 되 어 있 을 때 되 돌아 갑 니 다.
3、 params,headers;
params:지정 한 request 에 일부 매개 변수 값 을 포함해 야 이 방법 을 처리 할 수 있 습 니 다.
headers:지정 한 request 에는 지정 한 header 값 이 포함 되 어 있어 야 요청 을 처리 할 수 있 습 니 다.
예시:
1、value  / method 예제
기본 RequestMapping("...str...")은 value 의 값 입 니 다.
[java] view plain copy
@Controller  
  • @RequestMapping("/appointments")  

  • public class AppointmentsController {  
  •   

  •     private final AppointmentBook appointmentBook;  
  •       

  •     @Autowired  
  •     public AppointmentsController(AppointmentBook appointmentBook) {  

  •         this.appointmentBook = appointmentBook;  
  •     }  

  •   
  •     @RequestMapping(method = RequestMethod.GET)  

  •     public Map get() {  
  •         return appointmentBook.getAppointmentsForToday();  

  •     }  
  •   

  •     @RequestMapping(value="/{day}", method = RequestMethod.GET)  
  •     public Map getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) {  

  •         return appointmentBook.getAppointmentsForDay(day);  
  •     }  

  •   
  •     @RequestMapping(value="/new", method = RequestMethod.GET)  

  •     public AppointmentForm getNewForm() {  
  •         return new AppointmentForm();  

  •     }  
  •   

  •     @RequestMapping(method = RequestMethod.POST)  
  •     public String add(@Valid AppointmentForm appointment, BindingResult result) {  

  •         if (result.hasErrors()) {  
  •             return "appointments/new";  

  •         }  
  •         appointmentBook.addAppointment(appointment);  

  •         return "redirect:/appointments";  
  •     }  

  • }  
    value 의 uri 값 은 다음 세 가지 입 니 다.
    A)일반적인 구체 적 인 값 으로 지정 할 수 있다.
    B)  변 수 를 포함 하 는 클래스 값(URI Template Patterns with Path Variables)으로 지정 할 수 있 습 니 다.
    C)정규 표현 식 을 포함 하 는 클래스 값(URI Template Patterns with Regular Expressions)으로 지정 할 수 있 습 니 다.
    example B)
    [java] view plain copy
    @RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)  
  • public String findOwner(@PathVariable String ownerId, Model model) {  

  •   Owner owner = ownerService.findOwner(ownerId);    
  •   model.addAttribute("owner", owner);    

  •   return "displayOwner";   
  • }  

  • example C)
    [java] view plain copy
    @RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")  
  •   public void handle(@PathVariable String version, @PathVariable String extension) {      

  •     // ...  
  •   }  

  • }  
    2 consumes,produces 예시
    cousumes 의 예:
    [java] view plain copy
    @Controller  
  • @RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")  

  • public void addPet(@RequestBody Pet pet, Model model) {      
  •     // implementation omitted  

  • }  
    방법 은 request Content-type 이'application/json'형식의 요청 만 처리 합 니 다.
    produces 의 사례:
    [java] view plain copy
    @Controller  
  • @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")  

  • @ResponseBody  
  • public Pet getPet(@PathVariable String petId, Model model) {      

  •     // implementation omitted  
  • }  

  • 방법 은 request 요청 에 Accept 헤더 에'application/json'의 요청 만 처리 하 는 동시에 되 돌아 오 는 내용 유형 이 application/json 임 을 암시 합 니 다.
    3 params,headers 예제
    params 의 사례:
    [java] view plain copy
    @Controller  
  • @RequestMapping("/owners/{ownerId}")  

  • public class RelativePathUriTemplateController {  
  •   

  •   @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")  
  •   public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      

  •     // implementation omitted  
  •   }  

  • }  
     처리 요청 에 만"my Param","my Value"라 는 요청 이 포함 되 어 있 습 니 다.
    headers 의 예:
    [java] view plain copy
    @Controller  
  • @RequestMapping("/owners/{ownerId}")  

  • public class RelativePathUriTemplateController {  
  •   

  • @RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")  
  •   public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      

  •     // implementation omitted  
  •   }  

  • }  
     request 만 처리 하 는 header 에는'Refer'요청 헤더 와 대응 하 는 값 이'http://www.ifeng.com/'인 요청 이 포함 되 어 있 습 니 다.
    위 에 서 는 RequestMapping 이 지정 한 방법 으로 어떤 요청 을 처리 하 는 지 만 소개 하 였 으 며,다음 편 에 서 는 request 가 제출 한 데이터(데이터 바 인 딩)와 되 돌아 오 는 데 이 터 를 어떻게 처리 하 는 지 설명 할 것 입 니 다.

    좋은 웹페이지 즐겨찾기