>  기사  >  Java  >  Spring MVC에서 일반적으로 사용되는 주석 방법 소개

Spring MVC에서 일반적으로 사용되는 주석 방법 소개

巴扎黑
巴扎黑원래의
2017-09-08 09:47:461439검색

이 글에서는 Spring mvc의 공통 Annotation을 주로 소개하며, @RequestMapping, @RequestParam, @ModelAttribute 등 유사한 Annotation을 자세히 소개하고 있으니 관심 있는 분들은 알아보세요

Spring은 버전부터 프로그래밍에 Annotation을 도입했습니다. 2.5. 사용자는 @RequestMapping, @RequestParam, @ModelAttribute 및 기타 유사한 주석을 사용할 수 있습니다. 지금까지 Spring 버전은 큰 변화를 겪었지만 Annotation의 기능은 계속해서 확장되어 개발자의 손을 더욱 쉽게 만들어주었습니다. 이는 Function의 힘과 불가분의 관계에 있습니다. 오늘은 Annotation에 대해 살펴보겠습니다. Spring MVC 4에서 일반적으로 사용됩니다.

1. @Controller

Controller는 애플리케이션에 대한 액세스를 제공하는 서비스 인터페이스를 통해 정의된 동작이며, 이를 모델로 변환한 다음 사용자에게 뷰를 제공합니다. Spring MVC는 @Controller를 사용하여 컨트롤러를 정의하며, 이를 통해 클래스 경로에 정의된 구성 요소가 자동으로 감지되고 자동 등록될 수 있습니다. 자동 감지를 적용하려면 XML 헤더 파일 아래에 spring-context를 도입해야 합니다:


 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
 
  <context:component-scan base-package="org.springframework.samples.petclinic.web"/>
 
  <!-- ... --></beans>

2. @RequestMapping

@RequestMapping 주석을 사용하여 " /favsoft"를 사용하여 클래스 전체 또는 특정 처리 방법을 지정할 수 있습니다. 일반적으로 클래스 수준 주석은 특정 요청 경로를 양식 컨트롤러에 매핑하는 반면, 메서드 수준 주석은 단순히 특정 HTTP 메서드 요청("GET", "POST" 등) 또는 HTTP 요청 매개변수에 매핑합니다.


@Controller
@RequestMapping("/favsoft")
public class AnnotationController {
   
  @RequestMapping(method=RequestMethod.GET)
  public String get(){
    return "";
  }
   
  @RequestMapping(value="/getName", method = RequestMethod.GET)
  public String getName(String userName) {
    return userName;
  }
   
  @RequestMapping(value="/{day}", method=RequestMethod.GET)
  public String getDay(Date day){
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    return df.format(day);
  }
   
  @RequestMapping(value="/addUser", method=RequestMethod.GET)
  public String addFavUser(@Validated FavUser favUser,BindingResult result){
    if(result.hasErrors()){
      return "favUser";
    }
    //favUserService.addFavUser(favUser);
    return "redirect:/favlist";
  }
 
  @RequestMapping("/test")
  @ResponseBody
  public String test(){
    return "aa";
  }
   
}

@RequestMapping은 클래스 수준과 메서드 수준 모두에 적용할 수 있습니다. 클래스 수준에서 정의되면 이 컨트롤러에서 처리하는 모든 요청이 /favsoft 경로에 매핑됨을 나타냅니다. @RequestMapping의 메소드 속성을 사용하여 메소드 유형을 지정하지 않으면 HTTP GET/POST 메소드를 사용하여 데이터를 요청할 수 있습니다. 해당 유형만 사용하여 데이터를 얻으세요.

@RequestMapping @Validated 및 BindingResult를 사용하여 입력 매개변수를 공동으로 확인할 수 있습니다. 확인이 성공하거나 실패하면 각각 다른 뷰가 반환됩니다.

@RequestMapping은 URI 템플릿을 사용하여 URL에 액세스하도록 지원합니다. URI 템플릿은 하나 이상의 변수 이름으로 구성된 URL과 유사한 문자열입니다. 이러한 변수에 값이 있으면 URI가 됩니다.

3. @PathVariable

Spring MVC에서는 @PathVariable을 사용하여 메서드 매개변수에 주석을 달고 이를 URI 템플릿 변수의 값에 바인딩할 수 있습니다. 다음 코드에 표시된 대로


 String findOwner( String , Model model) {
  FavUser favUser = favUserService.findFavUser();
  model.addAttribute(
   ;
}

URI 템플릿 "favusers/{favUserId}"는 컨트롤러가 이 요청을 처리할 때 favUserId 값이 URI로 설정됩니다. 예를 들어 "favusers/favccxx"와 같은 요청이 있는 경우 favUserId의 값은 favccxx입니다.

@PathVariable은 다음과 같이 여러 주석을 가질 수 있습니다.


@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);
  Pet pet = owner.getPet(petId);
  model.addAttribute("pet", pet);  return "displayPet";
}

@PathVariable의 매개변수는 int, long, Date 등과 같은 간단한 유형일 수 있습니다. Spring은 이를 적절한 유형으로 자동 변환하거나 TypeMismatchException을 발생시킵니다. 물론 추가 데이터 유형을 지원하도록 등록할 수도 있습니다.

@PathVariable이 Map05ad6303f369fc4ccec4412db2772d19 유형 매개변수를 사용하는 경우 Map은 모든 URI 템플릿 변수로 채워집니다.

@PathVariable은 매우 강력한 속성을 결정하는 정규식 사용을 지원하며 경로 템플릿에서 자리 표시자를 사용할 수 있고 특정 접두사 일치, 접미사 일치 및 기타 사용자 정의 형식을 설정할 수 있습니다.

@PathVariable도 행렬변수를 지원합니다. 실제 시나리오에서는 많이 사용되지 않기 때문에 자세히 소개하지 않겠습니다. 어린이용 신발이 필요한 경우 공식 웹사이트의 문서를 확인하세요.

4. @RequestParam

@RequestParam은 다음 코드와 같이 요청된 매개변수를 메서드의 매개변수에 바인딩합니다. 실제로 이 매개변수가 구성되지 않은 경우에도 주석은 기본적으로 이 매개변수를 사용합니다. 지정된 매개변수를 사용자 정의하려면 @RequestParam의 필수 속성을 false(예: @RequestParam(value="id",required=false))로 설정합니다.

5. @RequestBody

@RequestBody는 메서드 매개변수가 HTTP 요청 본문에 바인딩되어야 함을 의미합니다.


@RequestMapping(value = "/something", method = RequestMethod.PUT)public void handle(@RequestBody String body, Writer writer) throws IOException {
  writer.write(body);
}

@RequestBody가 @RequestParam만큼 좋지 않다고 생각되면 HttpMessageConverter를 사용하여 요청 본문을 메서드 매개 변수로 전송할 수 있습니다. HttMessageConverser는 Object 개체 간에 HTTP 요청 메시지를 변환하지만 일반적으로 그렇지 않습니다. 완료. . REST 아키텍처를 구축할 때 @RequestBody는 @RequestParam보다 더 큰 장점이 있는 것으로 나타났습니다.

6. @ResponseBody

@ResponseBody는 @RequestBody와 유사하며 HTTP 응답 본문에 반환 유형을 직접 입력하는 기능입니다. @ResponseBody는 JSON 형식으로 데이터를 출력할 때 자주 사용됩니다. 코드는


@RequestMapping(value = "/something", method = RequestMethod.PUT)@ResponseBodypublic String helloWorld() {  return "Hello World";
}

7입니다.

我们经常见到一些控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@RequestMapping与@ResponseBody。


@RestController
public class FavRestfulController {
 
@RequestMapping(value="/getUserName",method=RequestMethod.POST)
public String getUserName(@RequestParam(value="name") String name){
return name;
}
}

8. HttpEntity

HttpEntity除了能获得request请求和response响应之外,它还能访问请求和响应头,如下所示:


@RequestMapping("/something")public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException {
  String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader"));  byte[] requestBody = requestEntity.getBody();  // do something with request header and body

  HttpHeaders responseHeaders = new HttpHeaders();
  responseHeaders.set("MyResponseHeader", "MyValue");  return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

9. @ModelAttribute

@ModelAttribute可以作用在方法或方法参数上,当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)。该方法支持与@RequestMapping一样的参数类型,但并不能直接映射成请求。控制器中的@ModelAttribute方法会在@RequestMapping方法调用之前而调用,示例如下:


@ModelAttribute
public Account addAccount(@RequestParam String number) {
  return accountManager.findAccount(number);
}

@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
  model.addAttribute(accountManager.findAccount(number));  
  // add more ...
}

@ModelAttribute方法用来在model中填充属性,如填充下拉列表、宠物类型或检索一个命令对象比如账户(用来在HTML表单上呈现数据)。

@ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。

@ModelAttribute作用在方法参数上

当@ModelAttribute作用在方法参数上时,表明该参数可以在方法模型中检索到。如果该参数不在当前模型中,该参数先被实例化然后添加到模型中。一旦模型中有了该参数,该参数的字段应该填充所有请求参数匹配的名称中。这是Spring MVC中重要的数据绑定机制,它省去了单独解析每个表单字段的时间。

@ModelAttribute是一种很常见的从数据库中检索属性的方法,它通过@SessionAttributes使用request请求存储。在一些情况下,可以很方便的通过URI模板变量和类型转换器检索属性。

위 내용은 Spring MVC에서 일반적으로 사용되는 주석 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.