- resultfulスタイル
- 例外処理
1.Restfuleスタイル
Restfuleスタイルは、ソフトウェアアーキテクチャのスタイルではなく、標準ですが、設計原理と制約を提供します。主にソフトウェアクライアントとサーバとの対話に適用されます。これは、HTTPプロトコルに基づいています。なお、分散処理プログラムを容易にするために、アプリケーション・フレームワークとの間の結合を低減するために、システムのスケーラビリティを改善することを目的とします。ソフトウェアのこのスタイルに基づいて、よりシンプル、より構造化とキャッシュメカニズムを実装しやすくすることができます。
resultfulスタイルでは、ユーザが同じ方法を使用してURLのURLを要求し、要求に:GET / POST /削除/リクエストを区別するなどの処理方法、に置きます。これは、フロントエンドの開発者は統一されたインタフェースを形成するために、元のアドレスを要求されたリソース上の混乱を別々の開発を舞台裏ないことができます。
違いを使用してください:httpプロトコルでは、4つの動詞は、動作モードを示しています/削除/ POST / PUTをGET 、 彼らは、4つの基本的な操作に対応。リソースを取得するために使用されます。新しく作成されたリソースのポストは、リソースを更新することができます。リソースを更新するために置きます。リソースを削除するには、[削除]
次のように一般的な形式は次のとおりです。
(値= "{ID}"、方法= RequestMethod.GET)@RequestMapping
@RequestMapping(値= "{ID}"、方法= RequestMethod.POST)
@RequestMapping(値= "{IDを}"、メソッド= RequestMethod.DELETE )
@RequestMapping(値= "{ID}"、方法= RequestMethod.PUT)
今、次のクラスを使用してコントローラ:
1 @Controller 2 @RequestMapping( "ユーザ" ) 3 パブリック クラスがUserController { 4 5 @RequestMapping(値= "{UID}"、メソッド= RequestMethod.GET)// 查询 6 パブリックストリングfingById(@PathVariable( "UID")int型のID){ 7 のSystem.out.println( "=== findbyid ===" )。 8 int型 A = 10/0 。 9 リターン「インデックス」。 10 } 11 12 @RequestMapping(方法= RequestMethod.POST)// 添加 13 公衆文字列ADDUSERS(ユーザーのユーザー){ 14 のSystem.out.println( "=== ADDUSERS ===" )。 15 のSystem.out.println(ユーザ)。 16 リターン「インデックス」。 17 } 18 19 @RequestMapping(方法= RequestMethod.PUT)// 修改 20 @ResponseBody 21 パブリック文字列updateUsers(ユーザーのユーザー){ 22 のSystem.out.println( "=== updateUsers ===" )。 23 のSystem.out.println(ユーザ)。 24 リターン「インデックス」。 25 } 26 27 (値= "{ID}"、方法= RequestMethod.DELETE)@RequestMapping // 删除 28 @ResponseBody 29 パブリック文字列の削除(@PathVariable INT ID){ 30 + "===削除===のSystem.out.println(IDを" ); 31 リターン「インデックス」。 32 } 33 }
我々はGoogleのプラグインを使用してテストのテストのための準備が完了した後、あなたが提出などの非常に便利な方法を選択することができます
試験することによって、両方のGETおよびPOST、ディスプレイ200ステータスコード(パス)
これはDELETEとPUTのために我々はテストで発見し、正しいことはできません
ブラウザだけでGETとPOSTので、そのテストするとき、私たちは、属性を追加する必要がある_method = PUT / _method =を、DELETE [プロフィールにフィルタを追加するには、対応する必要性をHiddenHttpMethodFilterフィルターの役割はPOSTにある]提出_method = PUT / _method = DELETE / DELETEを置くために変換され
1 <filter> 2 <filter-name>hiddenHttpMethodFilter</filter-name> 3 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>hiddenHttpMethodFilter</filter-name> 7 <url-pattern>/*</url-pattern> 8 </filter-mapping>
至此测试通过如下
2.异常处理
在上面的controller类中大家可能发现有一个地方会出错,抛出异常即int a=10/0,我们现在进行处理;
1 @RequestMapping(value="{uid}",method=RequestMethod.GET)//查询 2 public String fingById(@PathVariable("uid") int id) { 3 System.out.println("===findbyid==="); 4 int a=10/0;//抛出异常 5 return "index"; 6 }
对于此异常有两种处理方式,实际算是一种吧,看个人理解
第一种:在本类中加入以下代码
//该类中发生异常时由该方法来处理 @ExceptionHandler public ModelAndView error(Exception exception) { ModelAndView mv=new ModelAndView(); mv.addObject("error", exception.getMessage()); mv.setViewName("error"); return mv; }
当该类中发生异常时由该方法来处理,对应的可以在前端页面进行接收这个错误信
第二种:新建一个类,用来接收获得的所有的异常,以此避免在每一个类中进行异常处理
1 @ControllerAdvice 2 public class ExceptionController { 3 4 //该类中发生异常时由该类来处理 5 @ExceptionHandler 6 public ModelAndView error(Exception exception) { 7 ModelAndView mv=new ModelAndView(); 8 mv.addObject("error", exception.getMessage()); 9 mv.setViewName("error"); 10 return mv; 11 } 12 }
前端页面代码,其中需加入isErrorPage="true"属性,意思是此页面为错误信息显示页面,我们再次接收错误信息,当处理了上面的异常后跳出到这里显示
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isErrorPage="true"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 ${error } 11 </body> 12 </html>
测试结果,成功显示异常信息:
Tips(SpringMVC部分注解)
SpringMVC注解:
1@Controller:标注该类为控制层类
2.@RequestMapping:标注请求的地址
3.@ResponseBody:把java对象转化为json对象
4.@Valid:标注校验该数据
5.@PathVariable:接收uri地址的值赋值给参数
6.@SessionAttributes:保存到Session中
7.@RequestParam:接收参数若参数名不同可用,当没传参数值时可设置默认值
8.@ExceptionAdivice:标注一个类为异常处理类
9.@EcceptionHandler:标注一个方法为异常处理方法
10.@InitBinder:时间参数处理格式