@RequestParam
@RequestParam
[参见Reactive堆栈中的等效内容](../../../webflux controller/ann-methods/requestparam.md)
你可以使用@RequestParam注解将Servlet请求参数(即查询参数或表单数据)绑定到控制器中的方法参数上。
以下示例展示了如何实现这一点:
- 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);
emodel.addAttribute("pet", pet);
return "petForm";
}
// ...
}
使用
@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);
emodel["pet"] = pet
return "petForm"
}
// ...
}
使用
@RequestParam来绑定petId。
默认情况下,使用此注解的方法参数是必需的,但您可以通过将@RequestParam注解的required标志设置为false,或者通过使用java.util.Optional包装器来声明参数,来指定某个方法参数是可选的。
如果目标方法参数类型不是String,则会自动应用类型转换。请参阅类型转换。
将参数类型声明为数组或列表,可以允许为同一个参数名解析多个参数值。
当@RequestParam注解被声明为Map<String, String>或MultiValueMap<String, String>类型,并且没有在注解中指定参数名称时,那么该映射(map)将填充每个给定参数名称的请求参数值。以下示例展示了如何通过表单数据处理来实现这一功能:
- 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)确定,并且没有被其他任何参数解析器解析的参数,都会被视为被@RequestParam注释过。