この記事では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
@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 サイトの他の関連記事を参照してください。