SimpleController4Jでは、以下のパラメータを実行メソッドの引数に自動バインディングします。
SimpleController4Jでは、パスパラメータを自動バイディングすることが出来ます。
その際に以下の型に関しては、自動でキャストを実行することが出来ます。
/** * サンプルコントローラ */ @Controller @Route(path = "/sample") public class SampleController { @Route(path = "/path/<id:int>/<hoge:float>/<fuga:re:f.+>/<some>", method = Method.GET) public void pathMethod(float hoge, String fuga, String some, int id, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); out.println("id : " + id); out.println("hoge : " + hoge); out.println("fuga : " + fuga); out.println("some : " + some); out.print("path method execute!"); } }
■ 実行結果 CW-02:~ XXX$ curl localhost:8080/SimpleControllerSample/sample/path/1/9.9/fugaParam/someParam id : 1 hoge : 9.9 fuga : fugaParam some : someParam path method execute!
クエリストリング(GETパラメータ)もディスパッチされる実行メソッドの引数に自動バインディングされます。
実行メソッドの引数型に合わせてキャストが実行され、自動バインディングされます。
実行メソッド引数名とパラメータ名が同一である場合に、自動バイディングが実行され、実行メソッド引数名にない
パラメータは無視されます。
また、同一名のパラメータが複数存在する場合に、実行メソッドの引数が配列として定義されていない時は、
任意のパラメータ値が自動バインディングされます。
/** * サンプルコントローラ */ @Controller @Route(path = "/sample") public class SampleController { @Route(path = "/param", method = Method.GET) public void paramMethod(String hoge, int num, long lnum, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); out.println("hoge : " + hoge); out.println("num : " + num); out.println("lnum : " + lnum); out.println("param method execute!"); } }
■ 実行結果 CW-02:build XXX$ curl 'localhost:8080/SimpleControllerSample/sample/param?num=5&lnum=999&hoge=hogeParam' hoge : hogeParam num : 5 lnum : 999 param method execute!
また、クエリストリングに同一のパラメータが複数存在する場合は、実行メソッドに配列として自動バインディングされます。
/** * サンプルコントローラ */ @Controller @Route(path = "/sample") public class SampleController { @Route(path = "/params", method = Method.GET) public void paramsMethod(String[] hoge, double[] dnum, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); for (String str : hoge) { out.println("hoge : " + str); } for (double d : dnum) { out.println("dnum : " + d); } out.println("params method execute!"); } }
■ 実行結果 CW-02:build XXX$ curl 'localhost:8080/SimpleControllerSample/sample/params?dnum=1.1&dnum=2.2&hoge=hoge1&hoge=hoge2' hoge : hoge1 hoge : hoge2 dnum : 1.1 dnum : 2.2 params method execute!
フォームパラメータ(POSTパラメータ)もディスパッチされる実行メソッドの引数に自動バインディングされます。
実行メソッドの引数型に合わせてキャストが実行され、自動バインディングされます。
実行メソッド引数名とパラメータ名が同一である場合に、自動バイディングが実行され、実行メソッド引数名にない
パラメータは無視されます。
また、同一名のパラメータが複数存在する場合に、実行メソッドの引数が配列として定義されていない時は、
任意のパラメータ値が自動バインディングされます。
/** * サンプルコントローラ */ @Controller @Route(path = "/sample") public class SampleController { @Route(path = "/form", method = Method.POST) public void formMethod(String hoge, int num, double dnum, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); out.println("hoge : " + hoge); out.println("num : " + num); out.println("dnum : " + dnum); out.println("form method execute!"); } }
■ 実行結果 CW-02:Desktop XXX$ curl -X POST localhost:8080/SimpleControllerSample/sample/form --data 'num=5&dnum=9.9&hoge=hogeParam' hoge : hogeParam num : 5 dnum : 9.9 form method execute!
また、フォームパラメータに同一のパラメータが複数存在する場合は、実行メソッドに配列として自動バインディングされます。
/** * サンプルコントローラ */ @Controller @Route(path = "/sample") public class SampleController { @Route(path = "/forms", method = Method.POST) public void formsMethod(String[] hoge, float[] fnum, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); for (String str : hoge) { out.println("hoge : " + str); } for (float f : fnum) { out.println("fnum : " + f); } out.println("forms method execute!"); } }
■ 実行結果 CW-02:build shigeru_cw$ curl -X POST localhost:8080/SimpleControllerSample/sample/forms --data 'fnum=1.1&fnum=2.2&hoge=hoge1&hoge=hoge2' hoge : hoge1 hoge : hoge2 fnum : 1.1 fnum : 2.2 forms method execute!
ユーザ定義のクラスを実行メソッド引数に指定した場合も、クエリストリング(GETメソッド)・
フォームパラメータ(POSTパラメータ)が、引数に指定したクラスのフィールドに自動バインディングされます。
自動バイディングは、実行メソッドの引数に指定したクラスのフィールドとパラメータ名が一致する場合に実行されます。
以下の例は、データを格納するFormクラス(DTO)を実行メソッドに指定するものです。
■ Formクラス public class Form { private String hoge; private int num; private boolean flag; public String getHoge() { return hoge; } public void setHoge(String hoge) { this.hoge = hoge; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } }
/** * サンプルコントローラ */ @Controller @Route(path = "/sample") public class SampleController { @Route(path = "/class") public void classMethod(Form form, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); out.println("hoge : " + form.getHoge()); out.println("num : " + form.getNum()); out.println("flag : " + form.isFlag()); out.println("class method execute!"); } }
■ 実行結果 CW-02:build XXX$ curl -X POST localhost:8080/SimpleControllerSample/sample/class --data 'hoge=hogeParam&num=10&flag=true' hoge : hogeParam num : 10 flag : true class method execute!
その他、ディスパッチ先の実行メソッドには以下のパラメータを指定可能です。
/** * サンプルコントローラ */ @Controller @Route(path = "/sample") public class SampleController { @Route(path = "/context", method=Method.GET) public void contextMethod(HttpServletRequest request, HttpServletResponse response, ServletContext context, String fileName) throws IOException { File file = new File(context.getRealPath("/WEB-INF/resources/" + fileName)); OutputStream os = response.getOutputStream(); BufferedInputStream reader = new BufferedInputStream(new FileInputStream(file)); int len = 0; byte[] buffer = new byte[1024]; while ((len = reader.read(buffer)) >= 0) { os.write(buffer, 0, len); } reader.close(); } }
■ 実行結果 CW-02:build XXX$ curl localhost:8080/SimpleControllerSample/sample/context?fileName=icon.jpg ????JFIFHH??C??C?,,?? ???? ??`?,Az?߀?_i)?????73?=]??.E2a? ?T?p?ڡ??3p?4V?)??Pj ?5???;??????Y?'?^zy(8?r??q??"&???*??uM?n?$"?lrasd?ƙ???28?:ָeic?l??^Hի?{Yv9^d~uL?|??V?Z?ϧW?????.^i????s/??o??? 〜以下、省略〜
SimpleController4Jへのご意見やご感想がございましたら、メッセージをお願い致します。
また、SimpleController4Jを使用して頂きまして、バグがございましたらご連絡を頂けると助かります。
皆様からのご意見・ご感想をもとに、SimpleController4Jを改善・拡張をしていきたいと考えております。
皆様からのメッセージは当方で確認をしておりますが、仕事をしながらの開発となる為、すぐにご返信・対応をすることが
出来ない場合がございます。何卒ご容赦ください。
タイトル※ | |
---|---|
メールアドレス | |
内容※ |