質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

6875閲覧

`@RequestParam`を付与しないときの解釈

yuji38kwmt

総合スコア437

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/03/25 10:24

編集2018/03/25 10:26

環境

  • Spring Boot 1.5.9
    • Spring web 4.3.13
  • Java8

質問

@RequestParamを付与しないとき、どう解釈されているかを教えていただきたいです。

以下のコードは、URLクエリが?name=test&id=2のようなものであることを、想定しています。

【質問1】メソッド引数の型がString, intなど基本的な型の場合

java

1@Controller 2public class SampleController { 3 @GetMapping("/search2") 4 @ResponseBody 5 String search2(String name, int id ) { 6 String result = "name="+name + ",id=" + id; 7 return result; 8 } 9

上記のように@RequestParamが付与されていないコードは、下記のように解釈されている、ということで合っていますか?

java

1 @GetMapping("/search2") 2 @ResponseBody 3 String search2(@RequestParam(name="name") String name, @RequestParam(name="id") int id ) { 4 String result = "name="+name + ",id=" + id; 5 return result; 6 }

@RequestParam
の公式サイトに、以下のように書かれていました。

If the method parameter is Map<String, String> or MultiValueMap<String, String> and a parameter name is not specified, then the map parameter is populated with all request parameter names and values.

「a parameter name is not specified...」という文から、上記のように解釈した。

【質問2】メソッド引数の型がBeanクラスの場合

java

1@Controller 2public class SampleController { 3 @GetMapping("/search3") 4 @ResponseBody 5 String search3(SampleBean params) { 6 String result = "name="+params.getName() + ",id=" + params.getId(); 7 return result; 8 } 9 10 @Data //lombok annotation(Generate Getter or Setter) 11 public static class SampleBean { 12 String name; 13 int id; 14 } 15 16

上記のように@RequestParamが付与されていないコードは、どのように解釈されますか?
なぜ、アノテーションを付与しなくてもリクエストパラメータを取得できるのかが、疑問です。
@RequestParamとは違うアノテーションが付与されていると、解釈されているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

省略時はOptional(必須ではない)リクエストパラメータの扱いとなり、リクエストパラメータ名と同じ変数名にバインドします。もしメソッドの引数がString以外であれば、自動型変換を試みます。

これはリクエストパラメータを格納するDTOを用意した場合も同じです。

投稿2018/03/26 06:12

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuji38kwmt

2018/03/31 06:49

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問