controller 层 获取 页面 传来的值

本文介绍在SpringMVC框架中如何从前台获取参数并传递到后台Controller的方法,包括直接使用形参、通过HttpServletRequest、指定传参及通过对象接收等四种方式;同时介绍了将数据从Controller传回前台的三种常见方法。

在controller中获取前台传递的参数

将页面数据传递到controller

页面表单:

用户名:
年龄:
生日:

Controller为:

/**

* 1、直接使用形参获取前台传递的参数数据

* 要注意的是形参的名字必须和页面参数的名字一致

* @param model

* @param name

* @param age

* @param birth

* @return

*/

@RequestMapping(method=RequestMethod.POST)

publicString addUser(Model model,String name,Integer age,Date birth){

  model.addAttribute("message","添加了一个用户");

  System.out.println("name:"+name+ "\tage:"+age+"\tbirht:"+birth);

  System.out.println("UserController.addUser()");

  return"/WEB-INF/jsp/addsuc.jsp";

}

/**

* 2、使用对象接受前台传递的参数,

* 要注意的是前台传递的参数的名称必须和对象的属性名称一直,如果不一致则可以使用@ModelAttribute("u")String uname指定

*/

@RequestMapping(method=RequestMethod.POST)

publicString addUser(Model model,User user){

  model.addAttribute("message","添加了一个用户");

  System.out.println("name:"+user.getName()+ "\tage:"+user.getAge()+"\tbirht:"+user.getBirth());

  System.out.println("UserController.addUser()");

  return"/WEB-INF/jsp/addsuc.jsp";

}

接收值–四种方法:

第一种:参数直接写在controller参数列表中

@RequestMapping(“/test1.action”)
public ModelAndView test1(String name){
System.out.println(name);
return null;
}

第二种:request

@RequestMapping(“/test2.action”)
public ModelAndView test2(HttpServletRequest request){
System.out.println(request.getParameter(“name”));
return null;
}

第三种:指定传参

@RequestMapping(“/test3.action”)
public ModelAndView test3(@RequestParam(“name3”) String name){
System.out.println(name);
return null;
}

第四种:通过对象

@RequestMapping(“/test4.action”)
public ModelAndView test4(User user){
System.out.println(user);
return null;
}

传值–三种方法:

第一种:request

@RequestMapping(“/test5.action”)
public String test5(HttpServletRequest request,User user){
request.setAttribute(“message”, user.getName());
return null;
}

第二种:ModelAndView

@RequestMapping(“/test6.action”)
public ModelAndView test6(User user){
System.out.println(user);
ModelAndView mv = new ModelAndView();
mv.addObject(“message”, user.getName() );
mv.setViewName(“/index1.jsp”);
return mv;
}

第三种:Model

@RequestMapping(“/test7.action”)
public String test7(User user,Model model){
System.out.println(user);
model.addAttribute(“message”, user.getName() + ” hello”);
return “/index1.jsp”;
}

注:springmvc传值不止这三种方法

<think>好的,用户现在问的是在Controller如何声明从页面传来的字段。我需要根据不同的编程语言和框架来回答这个问题。首先,用户之前的问题是关于Java中Integer类型的声明,所以可能他们现在是在继续Java相关的开发,可能使用Spring框架,因为Spring在Java Web开发中很常见。 首先,我应该考虑Spring MVC中的Controller如何接收页面传来的参数。常见的方法有使用@RequestParam、@PathVariable、@RequestBody等注解。需要详细说明每种方式的用法和适用场景。 比如,@RequestParam用于获取查询参数或表单数据,@PathVariable用于RESTful风格的URL中的变量,而@RequestBody用于接收JSON或XML格式的请求体,通常用于POST请求。 另外,用户可能想知道如何处理不同的HTTP方法,比如GET和POST的区别,以及如何在Controller中声明对应的处理方法。可能还需要提到参数验证,比如使用@Valid注解,但用户的问题可能暂时不需要深入这部分,除非后续问题涉及。 还要注意参数的类型转换,比如基本类型和包装类的区别,以及如何处理可空参数。例如,使用@RequestParam(required = false)来允许参数不存在的情况。 可能用户是刚开始学习Spring MVC,所以需要给出具体的代码示例,比如在方法参数中声明@RequestParam String name,或者使用实体类来绑定表单数据,这时候需要@ModelAttribute注解。 同时,考虑到用户之前的问题涉及Integer类型,可能需要提醒在接收参数时,如何处理可能为null的情况,比如使用Integer类型而不是int,以避免自动赋默认的问题。 另外,可能需要对比其他框架或语言中的实现方式,比如在ASP.NET Core中使用模型绑定,或者在Node.js中使用Express框架时如何获取查询参数或请求体。但用户可能更关注Java Spring的情况,所以这部分可以作为扩展,但根据用户之前的提问历史,可能不需要,除非用户明确提到。 需要确保回答结构清晰,分点说明不同的场景和方法,并给出示例代码,这样用户更容易理解。同时,最后要附上相关问题,帮助用户进一步探索相关知识点。 总结一下,回答的结构应该是先介绍Spring MVC中的几种常见方式,每种方式给出示例和说明,然后可能提到其他框架的对比,最后注意事项和最佳实践,以及相关问题。</think>在 Controller 中声明从页面传来的字段,需要根据 HTTP 请求方法(GET/POST)和数据格式(查询参数、表单、JSON 等)选择合适的注解或绑定方式。以下是常见场景及实现: --- ### **1. GET 请求:查询参数(Query Parameters)** 使用 `@RequestParam` 注解接收 URL 中的键对参数。 ```java @GetMapping("/users") public String getUsers(@RequestParam String name, @RequestParam(required = false) Integer age) { // name 必填,age 可选 return "Received name: " + name + ", age: " + age; } ``` **特点**: - 参数直接暴露在 URL 中(如 `/users?name=John&age=25`)。 - 适用于简单过滤或分页场景。 --- ### **2. POST 请求:表单数据(Form Data)** 使用 `@RequestParam` 或 `@ModelAttribute` 接收表单字段(Content-Type: `application/x-www-form-urlencoded`)。 ```java @PostMapping("/submit") public String submitForm(@RequestParam String username, @RequestParam String password) { return "Received username: " + username + ", password: " + password; } // 或绑定到实体类 @PostMapping("/submit") public String submitForm(@ModelAttribute User user) { return "User: " + user.getUsername() + ", " + user.getPassword(); } ``` **特点**: - 表单字段通过键对传输。 - `@ModelAttribute` 适合字段较多的场景。 --- ### **3. POST/PUT 请求:JSON 数据(Request Body)** 使用 `@RequestBody` 接收 JSON 格式数据(需配置 `@RestController` 或 `@ResponseBody`)。 ```java @PostMapping("/save") public String saveData(@RequestBody User user) { return "Received user: " + user.getName() + ", age: " + user.getAge(); } ``` **要求**: - 请求头 `Content-Type: application/json`。 - 需定义与 JSON 字段匹配的实体类(如 `User`)。 --- ### **4. RESTful 路径参数(Path Variables)** 使用 `@PathVariable` 接收 URL 路径中的动态。 ```java @GetMapping("/users/{id}") public String getUserById(@PathVariable Long id) { return "User ID: " + id; } ``` **特点**: - URL 示例:`/users/123`。 - 适用于资源标识(如增删改查操作)。 --- ### **5. 文件上传(Multipart Data)** 使用 `@RequestParam MultipartFile` 接收上传的文件。 ```java @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { return "File name: " + file.getOriginalFilename() + ", size: " + file.getSize(); } ``` **要求**: - 表单需设置 `enctype="multipart/form-data"`。 - 需配置文件存储逻辑(如保存到服务器或云存储)。 --- ### **注意事项** 1. **参数类型匹配**: - 基本类型(如 `int`)需确保参数非空,否则抛出异常。推荐使用包装类(如 `Integer`)。 - 时间类型需配合 `@DateTimeFormat` 注解转换格式: ```java @GetMapping("/events") public String getEvents(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) { return "Date: " + date; } ``` 2. **参数校验**: - 使用 `@Valid` 结合 JSR 380 规范校验参数: ```java @PostMapping("/register") public String register(@Valid @RequestBody User user, BindingResult result) { if (result.hasErrors()) return "Invalid input"; return "Valid user: " + user.getName(); } ``` 3. **安全性**: - 对敏感数据(如密码)避免直接记录日志。 - 使用 `@RequestBody` 时需防范 JSON 注入攻击。 --- ### **其他框架对比** - **ASP.NET Core**:使用 `[FromQuery]`、`[FromBody]`、`[FromForm]` 明确指定数据来源。 - **Node.js (Express)**:通过 `req.query`(GET)、`req.body`(POST)或 `req.params`(路径参数)获取数据。 - **Python (Flask)**:使用 `request.args`(查询参数)、`request.form`(表单)、`request.json`(JSON)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值