検索
ホームページJava&#&チュートリアルSpring MVC で一般的に使用されるアノテーション メソッドの紹介

この記事では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 が Map 型パラメータを使用する場合、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 までご連絡ください。
Java Platform Independence:開発者にとってはどういう意味ですか?Java Platform Independence:開発者にとってはどういう意味ですか?May 08, 2025 am 12:27 AM

java'splatformentencemeansdeveloperscancancodecodeonceanddevicewithoutrocompilling.cancodecodecodecodecodecodecodecodecodecodecodecode compilling

最初の使用のためにJVMをセットアップする方法は?最初の使用のためにJVMをセットアップする方法は?May 08, 2025 am 12:21 AM

JVMをセットアップするには、次の手順に従う必要があります。1)JDKをダウンロードしてインストールする、2)環境変数を設定する、3)インストールの確認、4)IDEを設定する、5)ランナープログラムをテストします。 JVMのセットアップは、単に機能するだけでなく、メモリの割り当て、ガベージコレクション、パフォーマンスチューニング、エラー処理の最適化を行い、最適な動作を確保することも含まれます。

製品のJavaプラットフォームの独立性を確認するにはどうすればよいですか?製品のJavaプラットフォームの独立性を確認するにはどうすればよいですか?May 08, 2025 am 12:12 AM

toensurejavaplatformindopendence、soflowthesesteps:1)compileandrunyourapplicationOnMultiplePlatformsusingDifferentosAndjvversions.2)utilizeci/cdpipelines

現代開発のためのJava機能:実用的な概要現代開発のためのJava機能:実用的な概要May 08, 2025 am 12:12 AM

javastandsoutinModerndevelopmentduetoitsotsobustfeatureslikelambdaexpressions、andenhancedconcurrencysupport.1)lambdaexpressionssimplify functionSalprogramming、codemoconciseandable.2)

Javaのマスター:そのコア機能と機能を理解するJavaのマスター:そのコア機能と機能を理解するMay 07, 2025 pm 06:49 PM

Javaのコア機能には、プラットフォームの独立性、オブジェクト指向のデザイン、豊富な標準ライブラリが含まれます。 1)オブジェクト指向の設計により、コードは多型機能を通じてより柔軟で保守可能になります。 2)ゴミ収集メカニズムは、開発者のメモリ管理の負担を解放しますが、パフォーマンスの問題を回避するために最適化する必要があります。 3)標準ライブラリは、コレクションからネットワークまでの強力なツールを提供しますが、コードを簡潔に保つためにデータ構造を慎重に選択する必要があります。

Javaはどこでも実行できますか?Javaはどこでも実行できますか?May 07, 2025 pm 06:41 PM

はい、javacanruneverywhereduetoits "writeonce、runanywhere"哲学 "哲学

JDKとJVMの違いは何ですか?JDKとJVMの違いは何ですか?May 07, 2025 pm 05:21 PM

jdkincludestoolsfordeveloping and compilingjavacode、whilejvmrunsthecompiledbytecode.1)jdkcontainsjre、compiler、andutitivities.2)jvmmanagesbytecodeexexecutionandsupports "writeonce、runany。

Java機能:クイックガイドJava機能:クイックガイドMay 07, 2025 pm 05:17 PM

Javaの主な機能には、1)オブジェクト指向設計、2)プラットフォームの独立性、3)ガベージ収集メカニズム、4)豊富なライブラリとフレームワーク、5)並行性サポート、6)例外処理、7)連続進化。 Javaのこれらの機能により、効率的で保守可能なソフトウェアを開発するための強力なツールになります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター