Spring MVC의 @RequestMapping 메모 상세 정보

5370 단어 RequestMapping
인용문:
얼마 전 프로젝트에서 REST 스타일로 프로그램을 개발했지만 POST, PUT 모드로 데이터를 제출할 때 서버측이 제출하지 않은 데이터(서버측 매개 변수 귀속에 주석이 추가되지 않음)를 받아들일 수 없음을 발견하고 제출 방식은 응용 프로그램/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)을 지정합니다. 예를 들어 응용 프로그램/json,text/html;
produces: 되돌아오는 내용 형식을 지정합니다. 리퀘스트 요청 헤더의 (Accept) 형식에 이 지정한 형식이 포함되어야만 되돌아옵니다.
3、 params,headers;
params: 리퀘스트에 어떤 매개 변수 값을 포함해야 이 방법을 처리할 수 있도록 지정합니다.
headers: 지정request에 특정한 header 값을 포함해야 요청을 처리할 수 있습니다.
예:
1,value/method 예
기본 RequestMapping("...str...")바로value의 값입니다.

@Controller 
@RequestMapping("/appointments") 
public class AppointmentsController { 
 
  private final AppointmentBook appointmentBook; 
   
  @Autowired 
  public AppointmentsController(AppointmentBook appointmentBook) { 
    this.appointmentBook = appointmentBook; 
  } 
 
  @RequestMapping(method = RequestMethod.GET) 
  public Map<String, Appointment> get() { 
    return appointmentBook.getAppointmentsForToday(); 
  } 
 
  @RequestMapping(value="/{day}", method = RequestMethod.GET) 
  public Map<String, Appointment> 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)

@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)

@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의 예:

@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"형식인 요청만 처리합니다.
제품 예:

@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의 예:

@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 
 } 
} 
처리 요청에만 "myParam", "myValue"라는 요청이 포함되어 있습니다.
headers의 예:

@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만 처리하는 헤더에는 "Refer"요청 헤더와 대응하는 값이 지정되어 있습니다http://www.ifeng.com/'의 요청;
위에서 설명한 바와 같이, RequestMapping이 지정한 방법으로 어떤 요청을 처리하는지, 다음 편에서는 Request가 제출한 데이터(데이터 귀속)와 되돌아오는 데이터를 어떻게 처리하는지 설명할 것입니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기