ホームページ  >  記事  >  Java  >  Spring MVC で一般的に使用されるアノテーション メソッドの紹介

Spring MVC で一般的に使用されるアノテーション メソッドの紹介

巴扎黑
巴扎黑オリジナル
2017-09-08 09:47:461439ブラウズ

この記事ではSpring MVCの一般的なアノテーションを中心に、@RequestMapping、@RequestParam、@ModelAttributeなどの類似アノテーションについても詳しく紹介していますので、興味のある方はぜひ学んでみてください

Springではバージョンからプログラミングにアノテーションが導入されています。 2.5. ユーザーは @RequestMapping、@RequestParam、@ModelAttribute およびその他の同様のアノテーションを使用できます。これまでのところ、Spring バージョンには大きな変更が加えられていますが、アノテーションの機能は継続され、継続的に拡張されており、これはアノテーション機能の機能と切り離すことができません。今日はアノテーションについて見ていきます。 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 アノテーションを使用して、「」のような URL をマップできます。 /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 は、URL にアクセスするための URI テンプレートの使用をサポートしています。 URI テンプレートは、1 つ以上の変数名で構成される URL のような文字列で、これらの変数に値がある場合、それは URI になります。

3. @PathVariable

Spring MVC では、@PathVariable を使用してメソッドパラメータに注釈を付け、URI テンプレート変数の値にバインドできます。次のコードに示すように:


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

URI テンプレート「favusers/{favUserId}」は、変数 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 は行列変数もサポートしています。実際のシナリオではあまり使用されないため、詳細は説明しません。子供用の靴が必要な場合は、公式 Web サイトのドキュメントを確認してください。

4. @RequestParam

次のコードに示すように、@RequestParam はリクエストされたパラメーターをメソッド内のパラメーターにバインドします。実際、このパラメータが設定されていない場合でも、アノテーションはデフォルトでこのパラメータを使用します。指定したパラメーターをカスタマイズする場合は、@RequestParam の required 属性を 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 を使用してリクエストの本文をメソッド パラメーターに転送できますが、これは一般的には行われません。終わり。 。 REST アーキテクチャを構築する場合、@RequestBody には @RequestParam よりも大きな利点があることがわかりました。

6. @ResponseBody

@ResponseBody の機能は、戻り値の型を HTTP 応答本文に直接入力することです。 @ResponseBody は、JSON 形式でデータを出力する場合によく使用されます。コードは次のとおりです: @RestController


我们经常见到一些控制器实现了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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。