ホームページ  >  記事  >  Java  >  springmvc でよく使用される 5 つのアノテーションの使用

springmvc でよく使用される 5 つのアノテーションの使用

hzc
hzcオリジナル
2020-07-01 17:25:3010799ブラウズ

springmvc の 5 つの一般的なアノテーション: 1. @RequestMapping、リクエスト アドレス マッピングの処理に使用されるアノテーション、2. @RequestParam、リクエスト パラメーター領域のデータを関数処理のパラメーターにマッピングするために使用されます。メソッド; 3. @PathVariable、リクエスト変数の設定に使用されます。

springmvc でよく使用される 5 つのアノテーションの使用

@RequestMapping

は、リクエスト アドレス マッピングを処理するために使用されるアノテーションです。
クラスとメソッドに適用されます。クラスで使用すると、リクエストに応答するクラス内のすべてのメソッドがこのアドレスを親パスとして使用することを意味します。

Attribute

value: リクエストの実際のアドレスを指定します。値は通常の特定の値にすることも、特定の変数 (パス変数を含む URI テンプレート パターン)
は正規表現を含む値の型として指定できます (正規表現を含む URI テンプレート パターン)
method: 要求されたメソッドの種類 GET を指定します、POST、PUT、DELETE など。
consumes: application/json、text/html
など、リクエストを処理するための送信コンテンツ タイプ (Content-Type) を指定します。 generated: 返されるコンテンツ タイプを指定します。リクエスト ヘッダーの (Accept) タイプに指定されたタイプが含まれる場合にのみ、返されます。
params: 指定されたリクエストには特定のパラメータ値が含まれている必要がありますメソッドが処理できる前に
headers: このメソッドがリクエストを処理するには、指定されたリクエストに特定の指定されたヘッダー値が含まれている必要があります

  1.处理get请求: @RequestMapping(value = "index",method = RequestMethod.GET)
  2.springboot错误处理(使用app客户端返回json格式,使用浏览器返回html错误页)
   @RequestMapping(produces = "text/html")
  3.方法仅处理request Content-Type为“application/json”类型的请求
   @RequestMapping(value = "/pets", consumes="application/json")
  4.仅处理请求中包含了名为“myParam”,值为“myValue”的请求
   @RequestMapping(value = "/pets/{petId}", params="myParam=myValue") 
  5.仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.rxy.com/”的请求
   @RequestMapping(value = "/pets", headers="Referer=http://www.rxy.com/")

@RequestParam

は、リクエスト パラメーター領域のデータを関数処理メソッドにマッピングするために使用されます。
パラメーターに適用されるもの: メソッド パラメーター

属性

値/名前:両方の属性はパラメータ名、つまり入力パラメータのリクエストパラメータ名を参照します(通常はフォーム名属性)
required: 必須かどうかに関係なく、デフォルトは true です。リクエストには対応するパラメータが必要です。そうでない場合は、例外がスローされます。
defaultValue: デフォルト値。リクエスト内に同じ名前のパラメータがない場合のデフォルト値を示します。このパラメータを設定する場合、必須なのは次のとおりです。自動的に false

  如果是原子类型,不管加没加注解,都必须有值,否则抛出异常,如果允许空值请使用包装类代替
  index(@RequestParam Integer num){}  表示该参数必须传递,值允许为空
  表示该参数非必须,如果不传则默认为0
  getPageData(@RequestParam(name="pageNum",defaultValue="0") String pageNo, String pageSize)

@PathVariable

に設定されます。リクエスト URL 内のテンプレート変数をマップするために使用されます。関数処理メソッドのパラメータに移動します。つまり、uri テンプレート内の変数を取り出します。パラメータとして
適用可能: メソッド パラメータ

属性

値: 名前がメソッド パラメータと同じである場合は、URL テンプレート変数名を指定します。名前が異なる場合は、次のようにする必要があります。

    @RequestMapping("/index/{id}")
         public String index(@PathVariable("id") String sdf){
           System.out.println(sdf);
           return "index";
     }

@ResponseBody

このアノテーションは、Controller メソッドによって返されたオブジェクトに適切な を渡すために使用されます。 HttpMessageConverter が指定された形式に変換された後、Response オブジェクトの body データ領域に書き込まれます。デフォルトでは、springmvc json の形式で返されます (jackson コンバータを使用します)
該当: 返されたデータが HTML タグを含むページではなく、他の形式のデータ (たとえば、 @
RequestBody HTTP リクエスト本文を適切な HttpMessageConverter オブジェクトに変換します @
ResponseBody コンテンツまたはオブジェクトを返しますHTTP レスポンスボディとして、HttpMessageConverter に適したアダプタ変換オブジェクトを呼び出し、出力ストリーム

@RequestBody

1 を書き込みます。このアノテーションは、リクエスト リクエストのボディ部分を読み取り、解析するために使用されます。システムのデフォルト構成の HttpMessageConverter を使用して、対応するデータを返されるオブジェクトにバインドします。オブジェクト

2 で、HttpMessageConverter によって返されたオブジェクト データを、コントローラのメソッドのパラメータにバインドします。
Applicable : リクエストの Content-Type のメソッド パラメータ: application/json、application/xml はこれを使用する必要があります。 注
application/x-www-form-urlencoded の場合、リクエスト メソッドが指定されている場合は必須です。
POST/GET メソッドではオプションです (つまり、@RequestParam、@ModelAttribute も処理できるため必須ではありません)
マルチパート/フォームデータの場合、@RequestBody はこの形式のデータを処理できません
属性: required: 必須かどうか。デフォルトは true で、リクエストには対応するパラメータが必要であることを示します。そうでない場合は例外がスローされます
Example: 通常、このアノテーションを使用するフロントエンドは ajax リクエストを送信し、その後、 request 部分は次のとおりです:

         $.ajax({
           type: "POST",
           url:"/role/saveRole",
           contentType:"application/json",
           data: JSON.stringify(_self.form)...
注: contentType は省略できません。データは stringify を通じて json 文字列に変換する必要があります。

その後、対応するメソッドは次のように記述できます:

@RequestMapping(value = "/saveRole",method = RequestMethod.POST)
public String saveRole(@RequestBody People requestJson) {}
フロントエンドがオブジェクトの配列を渡す場合、バックエンドは List を使用してそれを直接受け入れることもできます。これはリスト データをバインドする最も実用的な方法です

@CookieValue

リクエスト ヘッダーの Cookie 値をメソッドのパラメーターにバインドできます。

該当: メソッド パラメーター

获取cookie中的JSESSIONID
public String index(@CookieValue("JSESSIONID") String cookie){}
@RequestHeader

リクエストをバインドできます。 リクエスト ヘッダー部分の値メソッドのパラメータにバインドされます

適用対象: メソッド パラメータ

获取请求中Accept-Encoding值,返回gzip, deflate, br
public String index(@RequestHeader("Accept-Encoding") String host){return host;}

@ExceptionHandler

注解在方法上,表示该方法用于处理特定的异常,处理范围是当前类,如果想要全局捕获异常,需要使用@ControllerAdvice
当一个Controller中有多个HandleException注解出现时,那么异常被哪个方法捕捉呢?这就存在一个优先级的问题
ExceptionHandler的优先级是:在异常的体系结构中,哪个异常与目标方法抛出的异常血缘关系越紧密,就会被哪个捕捉到
属性:value: 需要处理的异常类型集合(Class)
在当前Controller有两个处理异常的方法,当访问/index时,页面显示: json data

package com.rxy.controller;

@Controller
public class HelloController {
    
    @ExceptionHandler({ ArithmeticException.class })
    @ResponseBody
    public String handleArithmeticException(Exception e) {
        e.printStackTrace();
        return "json data";
    }
    
    @ExceptionHandler({ IOException.class })
    public String handleIOException(Exception e) {
        e.printStackTrace();
        //返回错误页面
        return "error";
    }

    @RequestMapping("/index")
    public String index(){
        int i = 10 / 0;
        return "index";
    }

}

以上がspringmvc でよく使用される 5 つのアノテーションの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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