spring mvc 4における注釈に関する詳細解説教程


前言
本文を始める前に、まず最初に習ったspringmvcです。イメージを深めるために、関連するspringmvc 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:p="http://www.springframework.org/schema/p" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 <context:component-scan base-package="com.chen" />
</beans>
2.@ Request Mapping
Request Mappingの注釈は、クラス全体または特定の処理方法に「/admin」のようなURLをマッピングする。一般的に、クラスレベルの注釈は、特定の要求パスをフォームコントローラにマッピングし、方法レベルの注釈は、特定のHTTP方法要求(「GET」、「POST」など)またはHTTP要求パラメータにマッピングするだけである。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("admin")
public class LoginController {
 
 @RequestMapping(value = "login" , method = RequestMethod.GET , consumes = "text/html")
 public String toLoginPage(){
 return "/WEB-INF/jsp/login.jsp";
 }
}
上記のurlの訪問先は、local host:8080/proj/admin/logine.であるべきです。
consumes-処理要求の提出内容タイプを指定します。例えば、appication/json、text/html。
produces-返されるコンテンツタイプを指定して、指定されたタイプがrequest要求ヘッダに含まれている場合にのみ戻ります。
value-要求の実際の住所を指定します。指定されたアドレスはURI Templateモードでもいいです。
     A)普通の具体的な値に指定できます。
     B)ある変数を含むクラスの値に指定できます。
     C)正規表現を含む一連の値(URI Template Patterns with Reglar Expressions)として指定できます。
以下の例を示します

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class BlogController {
 
 @RequestMapping(value = "blog/{nick}/{year:20\\d{2}}/{month:1|1[0-2]}/{day:[12][0-9]|30|[1-9]}" , method = RequestMethod.GET)
 public String toBlogPage(@PathVariable String nick,
  @PathVariable Integer year,@PathVariable Integer month,@PathVariable Integer day){
 return "/WEB-INF/jsp/blog.jsp";
 }
}
パラms-指定されたrequestにはいくつかのパラメータ値が含まれている必要があります。
headers-requestには特定の指定されたheader値が含まれていなければならないことを指定して、この方法に要求を処理させることができない。
以下の例を示します

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class BlogController {
 
 //   request header      “Refer”        “http://www.ttyouni.com/”   
 @RequestMapping(value = "image", headers="Referer=http://www.ttyouni.com/" )
 public String getImage(){
 return "/WEB-INF/jsp/image.jsp";
 }
}
3.@ RathVarable
Spring MVCでは、@PathVarableの注釈方法パラメータを使用してURIテンプレート変数の値に結びつけることができ、これまでの例でも関連する表現があった。
4.5@Request Param
@Request Paramは、要求されたパラメータを方法のパラメータに結びつける。このパラメータを設定しなくても、注はデフォルトで使用されます。指定したパラメータをカスタマイズしたいなら、@request Paramのrequired属性をfalseに設定できます。
5.@ Request Body
@Request Bodyは、方法パラメータがHTTP要求Bodyにバインドされるべきであることを意味する。
6.@ Session Attibutes
@Session Attibutesは、ModelMapオブジェクトのput操作により設定に関するsessionを設定することができます。
例は以下の通りです

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.chen.proj.service.UserService;

@Controller
@RequestMapping("admin")
@SessionAttributes("user")
public class LoginController {
 
 @Resource
 UserService service;
 
 @RequestMapping(value = "doLogin", method = RequestMethod.POST)
 public String doLogin(@RequestParam String username , @RequestParam String password, HttpServletRequest request, 
            ModelMap map ){ 
 try {
  User user = service.doLogin(username, password); 
  map.put("user", user);
 } catch (Exception e) {
  request.setAttribute("error", e.getMessage());
  return "/WEB-INF/jsp/login.jsp";
 } 
 return "/WEB-INF/jsp/loginsuccess.jsp";
 }
 
}
7.@ ResonseBody
@RespnseBodyは@Request Bodyと似ています。戻りタイプを直接HTTP reponse bodyに入力する役割をしています。ResonseBodyはJSON形式のデータを出力する時に使います。
例は以下の通りです

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.chen.proj.bean.User;

@Controller
public class JsonController {

 @ResponseBody
 @RequestMapping("/getJson")
 public User getUserInfo(){
 User user = new User();
 user.setPassword("1234");
 user.setUsername("jsontest");
 return user;
 } 
}
8.@ Restt Controller
 私たちはよくいくつかのコントローラを見て、RESTのAPIを実現しました。json、xmlまたは他のユーザー定義の種類のサービスだけを提供します。RetsControllerはRESTタイプのコントローラを作成するために使用されます。@Controllerタイプです。Request Mappingと@ReponseBodyを重複して書くのを避けるタイプです。
9.@ ModelAttribute
@ModelAttributeは、方法または方法パラメータに作用し、方法に作用するとき、この方法の目的は1つ以上のモデル属性を追加することです。
方法パラメータに作用すると,このパラメータは方法モデルで検索できることを示した。このパラメータが現在のモデルにない場合、このパラメータは先に実装されてからモデルに追加されます。このパラメータがモデルに存在すると、このパラメータのフィールドは要求パラメータ整合のすべての名前に塗り込められるべきである。これは、各フォームフィールドを個別に解析する時間を省くspring mvcにおいて重要なデータリンク機構である。

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.chen.proj.bean.User;

@Controller
public class UserController {

 @ModelAttribute
 public User addUser(@RequestParam String number) {
 return service.findUser(number);
 }

 @ModelAttribute
 public void populateModel(@RequestParam String number, Model model) {
 model.addAttribute(service.findUser(number)); 
 // add more ...
 }
}
注の出現はxmlの設定ファイルが空いっぱいに飛ぶ時代を終焉しました。プログラムにより読み取り可能性が高く、構成性と柔軟性があります。もっと簡潔で明瞭な感じを与える。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらすことを望んでいます。もし疑問があれば、メッセージを残して交流してください。ありがとうございます。