@RequestParam

@RequestParam アノテーションを使用して、サーブレットリクエストパラメーター(つまり、クエリパラメーターまたはフォームデータ)をコントローラーのメソッド引数にバインドできます。

次の例は、その方法を示しています。

  • Java

  • Kotlin

@Controller
@RequestMapping("/pets")
public class EditPetForm {

	// ...

	@GetMapping
	public String setupForm(@RequestParam("petId") int petId, Model model) { (1)
		Pet pet = this.clinic.loadPet(petId);
		model.addAttribute("pet", pet);
		return "petForm";
	}

	// ...

}
1@RequestParam を使用して petId をバインドします。
import org.springframework.ui.set

@Controller
@RequestMapping("/pets")
class EditPetForm {

	// ...

	@GetMapping
	fun setupForm(@RequestParam("petId") petId: Int, model: Model): String { (1)
		val pet = this.clinic.loadPet(petId);
		model["pet"] = pet
		return "petForm"
	}

	// ...

}
1@RequestParam を使用して petId をバインドします。

デフォルトでは、このアノテーションを使用するメソッドパラメーターは必須ですが、@RequestParam アノテーションの required フラグを false に設定するか、引数を java.util.Optional ラッパーで宣言することで、メソッドパラメーターをオプションとして指定できます。

ターゲットメソッドのパラメーター型が String でない場合、型変換が自動的に適用されます。型変換を参照してください。

引数の型を配列またはリストとして宣言すると、同じパラメーター名の複数のパラメーター値を解決できます。

@RequestParam アノテーションが Map<String, String> または MultiValueMap<String, String> として宣言され、アノテーションにパラメーター名が指定されていない場合、マップには指定されたパラメーター名ごとにリクエストパラメーター値が設定されます。次の例は、フォームデータ処理でこれを行う方法を示しています。

  • Java

  • Kotlin

@Controller
@RequestMapping("/pets")
class EditPetForm {

	// ...

	@PostMapping(path = "/process", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
	public String processForm(@RequestParam MultiValueMap<String, String> params) {
		// ...
	}

	// ...
}
@Controller
@RequestMapping("/pets")
class EditPetForm {

	// ...

	@PostMapping("/process", consumes = [MediaType.APPLICATION_FORM_URLENCODED_VALUE])
	fun processForm(@RequestParam params: MultiValueMap<String, String>): String {
		// ...
	}

	// ...

}

@RequestParam の使用はオプションであることに注意してください(たとえば、属性を設定するため)。デフォルトでは、単純な値型(BeanUtils#isSimpleProperty (Javadoc) によって決定される)であり、他の引数リゾルバーによって解決されない引数は、あたかも @RequestParam でアノテーションが付けられているかのように扱われます。