开发中使用springMVC接收参数的问题

ssm

开发中使用springMVC接收参数的问题

HttpServletRequest

HttpServletRespose

HttpSession

Model/ModelMap:最终用来填充request域

其它简单的数据类型

一、针对一般的表单提交或者使用ajax提交的数*(注意name属性的对应)

(1)第一种,直接将参数放到对应的路由方法作为参数列表
注意name属性的对应
@RequestMapping("/doLogin")
public ModelAndView doLogin(String username,String password){}

(2)第二种,通过httpServerletReques来接收如下
@RequestMapping("/doLogin")
public ModelAndView doLogin(HttpServletRequest request){
User user =userService.selectUserByName(request.getParameter(“username”));
ModelAndView modelAndView = new ModelAndView();}

(3)第三种方式,通过建立一个前端的vo对象,和User类很类似,这种适合字段比较多的,一次性传过去
@RequestMapping("/doLogin")
//方法三
public ModelAndView doLogin(UserVo userVo){
User user =userService.selectUserByName(userVo.getUsername());

(4)第四种,基于json传输

目前提倡前后端分离,json作为一种很简单高效的数据传输格式,前端与后端只需要传输json数据即可,不参与到路由指定和页面渲染,定义好统一接口之后,前后端各司其职,互补打扰

当返回对象都是json串,对于请求是json串,需要使用@RequestBody将json串转化为java对象,对于请求时key -value类型的,不需要进行转化,之所以返回json串的原因,方便客户端对返回结果进行解析

为了能够使用json需要在pom.xml文件中添加jar包依赖

<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-core-asl</artifactId>
  <version>1.9.13</version>
</dependency>

<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.13</version>
</dependency>
另外需要在spring-mvc的配置文件中配置转换器,因为上面提到了实际上就是java对象和json串之间的转换如下;

对于使用注解驱动配置处理器适配器的如下的则不需要上述的操作;
<mvc:annotation-driven></mvc:annotation-driven>

KaTeX parse error: Expected '}', got 'EOF' at end of input: … url:'{pageContext.request.contextPath}/doRegist.action’,
//这里设置contentType为json
contentType:‘application/json;charset=utf-8’,
//数据格式时json串
data:’{“username”:“zcj”,“password”:“admin”,“repeatpwd”:“admin”}’,

—@RequestMapping("/doRegist")
public @ResponseBody UserVo doRegist(@RequestBody UserVo userVo){

415 报错 ==因此,请求json和返回json,需要注意添加jacson的三个jar包和在请求的contentType中设置application/json,并将数据写成jacson串的格式

2。请求为普通的key-value格式的,返回json串,这种一般和浏览器中使用get方式后买你带参数方式类似
//这里设置contentType为不需要设置,默认就好
//数据格式为key-value
data:‘username=zcj&password=admin&repeatpwd=admin’,
后台也没什么变化,就是将解析json串的@RequesBody注解给拿掉就好了如下:
@RequestMapping("/doRegist")
public @ResponseBody UserVo doRegist(UserVo userVo){

二、浏览器url中这种方式的数据获取

(5)第五种,接收来自url中的参数
这个一般是针对使用get方式,来自url中传递的参数的解析,使用的是@RequestParam这个注解

之所以需要这个注解是因为,对于第一种这样的情况,必须要求request传入的参数名称和controller的参数一样,使用注解就可以通过指定value属性,实现形参名称和传入的参数名称不一样的情况
http://localhost:8080/main.action?name=test
@RequestMapping("/main")
public ModelAndView main(@RequestParam(value = “name”) String username ){
可以看到我们url中参数是name,在controller中形参名称叫username,解除了必须一致的约束

对于有些比如时间这样的格式,我们在定义自己的vo时,就可能出现需要把日期串转化为java对象中的日期类型(详情见ssm收藏)

三:项目中实际用到

保存时传递参数,前端传递json对象key-value;后端接收request.getParameter(“username”)
得到一个json字符串类型对象jsonObject,首先用fastjson解析为json对象(实际为list集合里有多个对象),
对json对象按list处理,遍历后得到json对象{实际为map.getString(key)},得到每个json对象,在从对象里获取value,封装处理保存。实现保存循环保存多个对象,

注意:前端请求报400,跨域问题。解决方案后端设置请求头,Accept: *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值