Spring mvcコメント

5157 ワード

springの注釈はたくさんありますが、今日は主に以下のようにいくつかのspring mvcでよく使われている注釈を紹介します.
@Controller
@ControllerはBeanからspringまでの文脈を登録します.beanのIDはデフォルトではクラス名の先頭文字で小文字で、あなたも自分で指定できます.
方法1:
@Controller
public class TestController{}
方法二:           
@Controller(「tmpController」)
public class TestController{}
@Request Mapping
1.@Request Mappingは、アクセスのURLを定義するために使用されます.クラス全体に@Request Mappingを定義したり、方法ごとに1つを指定したりすることができます.
@Request Mappingをクラスレベルに置いて、これは方法レベルの@Request Mappingと協力して作業して、選択範囲を縮小する効果を得ることができます.
たとえば:
@Request Mapping(\/test)
public class TestController{}
このクラスのすべてのアクセス経路は/testの下にある.
2.クラス全体に@Request Mappingを使用する必要はありません.構成がなければ、すべての方法のアクセス経路構成は完全に独立し、関連はありません.
3.完全なパラメータ項目は:@Request Mapping(value=")、method={"",""}、headers={}、params={",","})で、各パラメータは次のように説明しています.
value:String[]アクセスアドレス設定
Method:Request Method[]アクセス方式を設定し、文字配列を調べ、GET、HEAD、POST、PUT、DELETE、OPTNS、TRACEなどを含み、よく使われるRequest Method.GET、Request Method.POST.
headers:String[]headersは一般にmethod=Request Method.POSTと組み合わせて使用されます.
params:String[]アクセスパラメータ設定、文字配列例えば:userId=id
4.valueの構成は、例えば、@Request Mapping(value=「/owners/owners」、method=Request Method.GET)というモダリティ変数の形をとることもできます.この点は@PathVarableで詳しく説明します.
5.Request Mapping paramsの補足説明は、パラメータ条件を設定することによってアクセスアドレスを制限することができます.例えば、params=「myParam=myValue」式では、アクセスアドレスにパラメータが含まれています.この規定の値「myParam=myValue」だけがマッチすることができます.(パラメータの値は任意でもよい)、「!myParam」などの表現は、現在要求されているアドレスには特定のパラメータ「myParam」が含まれていないことを示しています.
6.ちょっと注意したいのですが、類のために訪問先を*.do、*.htmlなどと定義したら、方法級の@Request Mappingでは、value値を再定義できません.そうでないとエラーが発生します.例えば、

@RequestMapping("/bbs.do")
public class BbsController {
    @RequestMapping(params = "method=getList")
    public String getList() {
     return "list";
    }
@RequestMapping(value= "/spList")
public String getSpecialList() {
     return "splist";
    }
}

上記の例のように、/bs.do?method=get Listは方法get List()にアクセスでき、アクセス/bs.do/spListはエラーを報告します.
@PathVarable
1.@PathVarableは、メソッドパラメータがアドレスURLに紐付けされたテンプレート変数を表します.
たとえば:

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);  
  model.addAttribute("owner", owner);  
  return "displayOwner";
}

2.@ PathVarableはアドレスバーに{xxx}テンプレート変数を使用する場合に使用します.
もし@Request Mappingに似たような変数が定義されていないなら、この変数はメソッドに@PathVarableを使用するとエラーが発生します.
@ModelAttribute
1.メソッドパラメータに適用して、パラメータはページで直接取得できます.request.set Attributeに相当します.
2.方法に適用し、戻り値を持つ方法のいずれかを@ModelAttributeと表記し、その戻り値をモデルオブジェクトの属性リストに入れる.
3.メソッドパラメータに適用する場合@ModelAttribute("xx")は、Objectのデータタイプに関連していなければなりません.
たとえば:

@ModelAttribute("items")//<——①            items   
public List<String> populateItems() {
        List<String> lists = new ArrayList<String>();
        lists.add("item1");
        lists.add("item2");
        return lists;
}
@RequestMapping(params = "method=listAllBoard")
public String listAllBoard(@ModelAttribute("currUser")User user, ModelMap model) {
        bbtForumService.getAllBoard();
        //<——②        items  
        System.out.println("model.items:" + ((List<String>)model.get("items")).size());
        return "listBoard";
}

①において、@ModelAttributeで注釈することにより、poputlateItem()方法は任意の要求処理方法の実行前に呼び出しられ、Spring MVCはこの方法を「items」という名前で暗黙のモデルオブジェクト属性リストに戻す.
したがって、②では、ModelMapを通じてitems属性にアクセスできます.listAllBoard()要求処理方法を実行すると、②では、コンソールで「model.items:2」の情報を印刷します.もちろん、要求したビューでモデルオブジェクトのitems属性にアクセスすることもできます.
@ResonseBody
この注釈は直接方法においてもよく、戻りタイプは直接HTTP応答バイトストリームとして出力されることを示しています.
@Request Param
@Request Paramはオプションのパラメータです.例えば、@Request Param("id")コメントですので、URLに付いているパラメータIDと紐付けられます.
参照が基本的なデータタイプである場合(int、long、floatなど)、URL要求パラメータには必ず対応するパラメータが必要です.org.springframe ork.web.util.NestedSerExceptionの異常が発生します.nullを基本的なデータタイプに変換できないというメッセージがあります.
@Request Paramは3つの構成@Request Param(required=、value=",defaultValue=")を含みます.
required:パラメータが必要かどうか、bootleanタイプ、オプションがあります.デフォルトはtrueです.
value:転送するパラメータ名、Steringタイプ、オプションがあります.値があれば、設定方法のパラメータに対応します.
defaultValue:Stringタイプで、パラメータが転送されていない場合はパラメータのデフォルトで指定された値です.
@Session Attributes session管理
Springは、次の要求に対応するModelMapの属性リストからこれらの属性にアクセスできるように、ModelMapの属性を選択的に指定することを許可します.この機能は、クラス定義で@Session Attributesの注釈を表示することによって実現されます.@Session Attributesは、クラスでしか宣言できません.
例えば
@Session Attributes//ModelMapの属性をcurrUserという属性
@Session Attributes(\"atr 1\"atr 2\")
@Session Attributes(types=User.class)
@Session Attributes(types={User.class、Det.class}
@SessionAttributes(types={User.class],value={「atr 1」,「atr 2」}
@Cookie Value cookie情報を取得する
@Request Header取得要求のヘッダ情報