java前端瘦客户_springmvc Controller接收前端参数的几种方式总结

(1) 普通方式-请求参数名和Controller方法的参数一致

1 @Controller2 @RequestMapping("/param")3 public classTestParamController {4 private static final Logger logger = LoggerFactory.getLogger(TestParamController.class);5 /**

6 * 请求参数名和Controller方法的参数一致7 * produces 设置返回参数的编码格式可以设置返回数据的类型以及编码,可以是json或者xml8 * {9 * @RequestMapping(value="/xxx",produces = {"application/json;charset=UTF-8"})10 * 或11 * @RequestMapping(value="/xxx",produces = {"application/xml;charset=UTF-8"})12 * 或13 * @RequestMapping(value="/xxx",produces = "{text/html;charset=utf-8}")14 * }15 *@paramname 用户名16 *@parampwd 密码17 *@return

18 *19 */

20 @RequestMapping(value = "/add", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})21 @ResponseBody22 publicString addUser(String name, String pwd){23 logger.debug("name:" + name + ",pwd:" +pwd);24 return "name:" + name + ",pwd:" +pwd;25 }26

27 }

如下图所示:

b78a683090ec66f8e75c857c5e0cc378.png

(2) 对象方式-请求参数名和Controller方法中的对象的参数一致

@Controller

@RequestMapping("/param")public classTestParamController {private static final Logger logger = LoggerFactory.getLogger(TestParamController.class);/*** 请求参数名和Controller方法的参数一致

* produces 设置返回参数的编码格式可以设置返回数据的类型以及编码,可以是json或者xml

* }

*@paramuser 用户信息

*@return**/@RequestMapping(value= "/addByObject", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByObject(User user){

logger.debug("name:" + user.getName() + ",pwd:" +user.getPwd());return "name:" + user.getName() + ",pwd:" +user.getPwd();

}

}

如下图所示:

921dcc4a61ef9963cf0f6d456cd127c6.png

(3) 自定义方法参数名-当请求参数名与方法参数名不一致时

注意可以在参数中增加@RequestParam注解。如果在方法中的参数增加了该注解,说明请求的url必须带该带有该参数,否则不能执行该方法。如果在方法中的参数没有增加该注解,说明请求的url无需带有该参数,也能继续执行该方法。

@RequestParam(defaultValue="0")可设置默认值(仅当传入参数为空时)。

@RequestParam(value="id")可接受传入参数为id的值,覆盖该注解注释的字段。

@RequestParam(name="name",defaultValue = "李四") String u_name   如果传入字段”name”为空,默认u_name的值为”李四”。若传入”name”不为空,默认u_name值为传入值。

以下只该出方法:

/*** 自定义方法参数名-当请求参数名与方法参数名不一致时

*@paramu_name 用户名

*@paramu_pwd 密码

*@return

*/@RequestMapping(value= "/addByDifName", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublic String addUserByDifName(@RequestParam("name") String u_name, @RequestParam("pwd")String u_pwd){

logger.debug("name:" + u_name + ",pwd:" +u_pwd);return "name:" + u_name + ",pwd:" +u_pwd;

}

如下图所示:

b342303023035e3635676e24e761d7dc.png

(4) HttpServletRequest方式

以下只给出该方法:

/*** 通过HttpServletRequest接收

*@paramrequest

*@return

*/@RequestMapping(value= "/addByHttpServletRequest", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByHttpServletRequest(HttpServletRequest request){

String name= request.getParameter("name");

String pwd= request.getParameter("pwd");

logger.debug("name:" + name + ",pwd:" +pwd);return "name:" + name + ",pwd:" +pwd;

}

如下图所示:

ddecb674e1c0d59a7e1f9a2a74d2bf83.png

(5) @PathVariable获取路径中的参数接收

注:url含有中文名称时,因为编码问题,无法进行映射,需要修改tomcat下的conf文件夹下的server.xml中的URIEncoding=”UTF-8”,对URL编码设置就可以解决中文问题。

对于经常遇到路径在有符号”.”问题,因为springmvc默认是把点后面的信息作为文件后缀,需要修改默认值:

另外,这时候如果只设置这个,请求可以传递到对于的controller,但传过去的数据会有问题,只会传最后一个点前面的数据,除非你在最后加上“/”,比如/news/测试.点/  这样就会把“测试.点”当作整体,不然只会得到“测试”。这时候我们可以这样设置@RequestMapping("/news/{title:.*}")

以下只给出该方法(本次不进行中文及特殊符号测试):

/*** 通过@PathVariable获取路径中的参数

*@paramname 用户名

*@parampwd 密码

*@return

*/@RequestMapping(value= "/add/{name}/{pwd}", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByPathVariable(@PathVariable String name, @PathVariable String pwd){

logger.debug("name:" + name + ",pwd:" +pwd);return "name:" + name + ",pwd:" +pwd;

}

如下图所示:

2a36a9f8b460518287f02db647e6166e.png

(6) @RequestBody-JSON方式接收

以上方式(1)/(2)/)(3)/(4)/(5)都是非JSON方式,也就是说如果使用JSON方式提交,会报错(在第二种对象方式中,将get请求方式修改为POST,并将上送数据修改为JSON串方式):

此时未引入jackson-databind.jar依赖。并在springmvc.xml文件未进行开启json格式的支持,也就是说未加入以下代码:

提交请求打印未有报错,但是返回的数据为null,如图所示:

b57a83b019754611499904ea22dada2c.png

若开启json格式的支持,测试也如上图所示,也并能正常返回。

原因:因为为在字段名称之前未使用@RequestBody注解。

eg1(测试普通对象)

代码如下所示,

/*** RequestBody-JSON 对象方式

*@paramuser

*@return

*/@RequestMapping(value= "/addByObjectJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByObjectJSON(@RequestBody User user){

logger.debug("name:" + user.getName() + ",pwd:" +user.getPwd());return "name:" + user.getName() + ",pwd:" +user.getPwd();

}

28cab869d43da56b8501019e7c702c89.png

eg2(测试List对象)

代码如下所示,

/*** RequestBody-JSON List对象方式

*@paramusers

*@return

*/@RequestMapping(value= "/addByListJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBodypublic String addUsersByListJSON(@RequestBody Listusers){

StringBuilder sb= new StringBuilder("{");if(null !=users){for(User user : users){

sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");

}

}

sb.append("}");

logger.debug(sb.toString());returnsb.toString();

}

测试结果

1d78a3331b3b2cbedd3d071313fdfcb0.png

eg3(测试Map对象)

代码如下图所示:

/*** RequestBody-JSON Map对象方式

*@paramusers

*@return

*/@RequestMapping(value= "/addByMapJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBodypublic String addUsersByMapJSON(@RequestBody Mapusers){

StringBuilder sb= new StringBuilder("{");if(null !=users){

Iterator it=users.keySet().iterator();while(it.hasNext()){

User user=users.get(it.next());

sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");

}

}

sb.append("}");

logger.debug(sb.toString());returnsb.toString();

}

测试结果

d391fbf884fdcefaedd9477cf4272dad.png

另外附部分源码:

User.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.mjs.study.action.dto;/*** @Description

* @ClassName User

* @Author Administrator

* @Data 2019/10/13 2:43

* @Version 1.0*/

public classUser {privateString name;privateString pwd;privateString sex;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getPwd() {returnpwd;

}public voidsetPwd(String pwd) {this.pwd =pwd;

}publicString getSex() {returnsex;

}public voidsetSex(String sex) {this.sex =sex;

}

}

View Code

TestParamController.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.mjs.study.action;importcom.github.pagehelper.PageInfo;importcom.mjs.study.action.dto.User;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;importjavax.servlet.http.HttpServletRequest;importjava.util.Iterator;importjava.util.List;importjava.util.Map;/*** @Description 测试springmvc传入参数

* @ClassName TestParamController

* @Author Administrator

* @Data 2019/10/13 1:33

* @Version 1.0*/@Controller

@RequestMapping("/param")public classTestParamController {private static final Logger logger = LoggerFactory.getLogger(TestParamController.class);/*** 请求参数名和Controller方法的参数一致

* produces 设置返回参数的编码格式 可以设置返回数据的类型以及编码,可以是json或者xml

* {

* @RequestMapping(value="/xxx",produces = {"application/json;charset=UTF-8"})

* 或

* @RequestMapping(value="/xxx",produces = {"application/xml;charset=UTF-8"})

* 或

* @RequestMapping(value="/xxx",produces = "{text/html;charset=utf-8}")

* }

*@paramname 用户名

*@parampwd 密码

*@return**/@RequestMapping(value= "/add", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUser(String name, String pwd){

logger.debug("name:" + name + ",pwd:" +pwd);return "name:" + name + ",pwd:" +pwd;

}/*** 自定义方法参数名-当请求参数名与方法参数名不一致时

*@paramu_name 用户名

*@paramu_pwd 密码

*@return

*/@RequestMapping(value= "/addByDifName", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublic String addUserByDifName(@RequestParam(name="name",defaultValue = "李四") String u_name, @RequestParam("pwd")String u_pwd){

logger.debug("name:" + u_name + ",pwd:" +u_pwd);return "name:" + u_name + ",pwd:" +u_pwd;

}/*** 请求参数名和Controller方法的参数一致

* produces 设置返回参数的编码格式 可以设置返回数据的类型以及编码,可以是json或者xml

*@paramuser 用户信息

*@return**/@RequestMapping(value= "/addByObject", produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByObject(User user){

logger.debug("name:" + user.getName() + ",pwd:" +user.getPwd());return "name:" + user.getName() + ",pwd:" +user.getPwd();

}/*** RequestBody-JSON 对象方式

*@paramuser

*@return

*/@RequestMapping(value= "/addByObjectJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByObjectJSON(@RequestBody User user){

logger.debug("name:" + user.getName() + ",pwd:" +user.getPwd());return "name:" + user.getName() + ",pwd:" +user.getPwd();

}/*** RequestBody-JSON List对象方式

*@paramusers

*@return

*/@RequestMapping(value= "/addByListJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBodypublic String addUsersByListJSON(@RequestBody Listusers){

StringBuilder sb= new StringBuilder("{");if(null !=users){for(User user : users){

sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");

}

}

sb.append("}");

logger.debug(sb.toString());returnsb.toString();

}/*** RequestBody-JSON Map对象方式

*@paramusers

*@return

*/@RequestMapping(value= "/addByMapJSON", produces = {"application/json;charset=UTF-8"})

@ResponseBodypublic String addUsersByMapJSON(@RequestBody Mapusers){

StringBuilder sb= new StringBuilder("{");if(null !=users){

Iterator it=users.keySet().iterator();while(it.hasNext()){

User user=users.get(it.next());

sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");

}

}

sb.append("}");

logger.debug(sb.toString());returnsb.toString();

}/*** 通过HttpServletRequest接收

*@paramrequest

*@return

*/@RequestMapping(value= "/addByHttpServletRequest", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByHttpServletRequest(HttpServletRequest request){

String name= request.getParameter("name");

String pwd= request.getParameter("pwd");

logger.debug("name:" + name + ",pwd:" +pwd);return "name:" + name + ",pwd:" +pwd;

}/*** 通过@PathVariable获取路径中的参数

*@paramname 用户名

*@parampwd 密码

*@return

*/@RequestMapping(value= "/add/{name}/{pwd}", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})

@ResponseBodypublicString addUserByPathVariable(@PathVariable String name, @PathVariable String pwd){

logger.debug("name:" + name + ",pwd:" +pwd);return "name:" + name + ",pwd:" +pwd;

}

}

View Code

该部分和个人github部分内容同步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值