1、请求处理参数

1.1 请求参数 @RequestParam

1.1.1 不使用 @RequestParam 注解

请求参数处理,不使用参数注解:
1.如果请求参数名和请求处理的形参名一致,springMvc 框架会自动将你的请求参数名对应的参数值,绑定到请求方法的形参中,方法内就可以直接使用,不用手动获取;

2.如果你的请求没有携带参数,不会报错,只不过,请求处理方法的形参值都是null或其他值,如果请求处理方法形参是一个实体参数,原理和单个类型参数一致(只要请求参数名和实体名一致也可以自动绑定);

测试不使用 @RequestParam 注解

@RequestMapping("/testSpringMvcNoRequestParam")
public String testSpringMvcNoRequestParam( String userId,String userName){

    System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s------",userId,userName));

    return "success";
}

测试 请求不带参数

测试 请求带参数

1.1.3 使用 @RequestParam 注解

@RequestParam 只能写在请求方法的形参上;
required = false 设置参数不是必传;
defaultValue 默认值;

  • 1.如果请求处理方法,形参前,只增加了此注解,没有指定任何属性:
    • 作用:当前形参必传,且参数名形参名必须一致,如果不一致,参数绑定失败,请求直接报400错误,提示你的参数没有提供;
  • 2.如果请求处理方法,形参前,只增加了此注解,并添加了value属性值
    • 作用:请求的参数名必须和value属性指定的名称一致,此value属性可以省略(只写 请求参数别名时,如果有其他的属性,value属性必须指定);
  • 3.如果要取消每个参数的必传校验,可以给此注解增加属性 required=false(默认是true,必传),参数可以不传,不需要参数值的绑定;
  • 4.如果某个参数必传,但是为了防止请求没有携带此参数,可以通过指定属性defaultValue增加默认值,如果调用当前请求方法处理,没有提供参数,自动使用默认值,绑定到方法的对应形参中;

测试

@RequestMapping("/testSpringMvcRequestParam")
public String testSpringMvcRequestParam(@RequestParam("uid") String userId,
                                        @RequestParam(value = "uname",required = false,defaultValue = "KH96-mvc") String userName,
                                        @RequestParam String userPwd){

    System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s,uPwd:%s------",userId,userName,userPwd));

    return "success";
}

测试结果

1.2 请求头参数 @RequestHeader

请求头参数@RequestHeader:

  • 处理请求头携带参数;
  • 作用:从请求头中获取参数,根据别名或者参数形参名,将请求头对应参数值,绑定到请求处理方法的形参中,直接使用,用法跟@RequestParam类似,也可以指定是否必传,默认值;

测试

@RequestMapping("/testSpringMvcNoRequestHeader")
public String testSpringMvcNoRequestHeader(@RequestHeader(value = "token",required = false,defaultValue = "KH96_mvc") String token){

    System.out.println(String.format("------ 请求头参数:token :%s ------",token));

    return "success";
}

测试结果

1.3 Cookie 参数 @CookieValue

@CookieValue:

从cookie中获取参数,根据别名或者参数形参名,将请求头对应参数值,绑定到请求处理方法的形参中,直接使用,用法跟@RequestParam,@RequestHeader类似,也可以指定是否必传,默认值;

测试

@RequestMapping("/testSpringMvcCookieValue")
public String testSpringMvcCookieValue(@CookieValue("JSESSIONID") String sessionId){

    System.out.println(String.format("------ 请求cookie参数:JSESSIONID :%s ------",sessionId));

    return "success";
}

测试结果:

1.4 实体参数

请求参数处理 实体参数:
自动将请求参数自动将实体的属性名与形参绑定,原理和单个参数类型一致;

测试

@RequestMapping("/testSpringMvcBeanParam")
public String testSpringMvcBeanParam(UserVO userVO){

    System.out.println(String.format("------ 请求实体参数:userVO :%s ------",userVO));

    return "success";
}

测试结果

1.5 原生servlet的API接口作为请求参数

用法和javaWeb截断学习的用法完全一致;

@RequestMapping("testSpringMvcServletAPI")
public  void testSpringMvcServletAIP(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws IOException, ServletException {
    //获取请求方式
    System.out.println(String.format("------ 请求方式:%s ------",request.getMethod()));

    //获取请求参数
    System.out.println(String.format("------ 请求参数:%s ------",request.getParameter("userTel")));

    //手动转发
    // request.getRequestDispatcher("/WEB-INF/views/success.jsp").forward(request,response);

    //获取session对象
    //手动添加参数
    HttpSession sessionHad = request.getSession();

    //sessionHad.setAttribute("userTel",request.getParameter("userTel"));

    //方式2;直接将HttpSession对象声明在请求处理方法的形参中,可以自动获取 session

    //重定向到
    //        response.sendRedirect("http://www.baidu.com");

}

2、响应数据处理

2.1 ModelAndView

ModelAndView 的数据模型放在request的作用域中,视图模型,放在request.getRequestDispatcher(前缀 视图名字 后缀);

结论:SpringMVC框架的前端核心控制器,会自动将返回的ModelAndView对象中的数据模型,添加到request作用域中使用内部转发方式,转发到目标视图;

测试

@RequestMapping("/testSpringMvcModelAndView")
public ModelAndView testSpringMvcModelAndView(String userEmail){

    //创建一个 ModelAndView 对象
    ModelAndView mav = new ModelAndView();

    //添加模型数据
    mav.addObject("uemail",userEmail);
    //可以添加多个模型数据,内部使用ModelMap集合存放的
    mav.addObject("uage",18);

    //设置目标视图
    mav.setViewName("ok");

    //返回  ModelAndView 对象
    return  mav;

}

测试结果

2.2 Map

要求:使用map返回模型数据,必须将map声明在请求处理方法的形参中,定义在方法的内部是无效的;

总结:

  • 1.springMVC底层在调用目标请求处理方法前,会自动创建一个Model接口的隐含对象作为模型数据存储对象,如果目标请求处理方法定义了一个map接口自动将隐含对象使用引用传递方式传递到目标请求处理方法中,方法体内就可以直接添加模型数据
  • 2.SpringMvc底层,在调用完你的请求处理方法后,不管返回什么类型,都会被转换为一个ModelAndView对象

测试

@RequestMapping("/testSpringMvcMap")
public  String testSpringMvcMap(String userEmail, Map<String,Object> map){

    //输出map的目标类型
    System.out.println(map.getClass().getName());
    //org.springframework.validation.support.BindingAwareModelMap

    //添加模型数据
    map.put("uemail",userEmail);

    //返回目标视图名称
    return "ok";

}

测试结果

2.3 Model

Model,可以添加模型数据;
必须将 Model 声明在请求处理方法的形参中,定义在方法的内部是无效的,用法跟Map 一致;

测试

@RequestMapping("/testSpringMvcModel")
public  String testSpringMvcModel(String userEmail, Model model){

    //添加模型数据
    model.addAttribute("uemail",userEmail);

    //返回目标视图名称
    return "ok";

}

测试结果

2.4 forward: 转发 和 redirect: 重定向

2.4.1forward 转发

只需要在返回的视图名称前,增加一个前缀:forward 即可,直接转发到目标资源;
当前请求处理方法中的模型对象可以带走;

@RequestMapping("/testSpringMvcForward")
public String testSpringMvcForward(Map<String,Object> map){

    //转发页面跳转
    //return "forward:/forward.jsp";

    //转发到其他请求中
    //return "forward:/testSpringMvcModel?userEmail=123@qq.com";

    //自定义转发,携带模型数据
    map.put("uaddr","nj_wd_kh96");

    return "forward:/testSpringMvcModel?userEmail=123@qq.com";
}

2.4.2 redirect 重定向

只需要在返回的视图名称前,增加一个前缀:redirect 即可,不做视图解析器,直接重定向

注意,重定向,当前请求处理方法中的模型对象不能带走

@RequestMapping("/testSpringMvcRedirect")
public String testSpringMvcRedirect(){

    //重定向页面跳转
    //return "redirect:/redirect.jsp";

    //重定向 可以重定向到 其他请求中
    return "redirect:/testSpringMvcModel?userEmail=123@qq.com";

}

2.5 @ResponseBody

返回JSON数据;

  • 注意:返回不需要手动转换为json字符串,直接返回对象;
  • @ResponseBody 将返回请求处理方法返回的源对象数据,直接转换为json格式字符串,返回,不走视图解析;
  • 注意:必须增加Jackson依赖的jar包,否者报错,且必须要增加注解扫描<mvc:annotation-driven></mvc:annotation-driven> 才可以;
  • 位置:可以写在请求处理方法上或者类上,写在类上,就是对当前类中所有请求处理方法生效,写在方法上,只有对当前方法生效;

2.5.1 jar包

<!-- JSON begin -->
<!--jackson-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.8.4</version>
</dependency>
<!--jackson-->
<!-- JSON end -->

2.5.2 配置

<beans xmlns=
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
    <!-- 开启MVC 的注解扫描 -->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

2.5.3 测试

@RequestMapping("/testSpringMvcJson")
@ResponseBody
public UserVO testSpringMvcJson(){

    //模拟获取去用户详情对象
    UserVO userVO = new UserVO();

    userVO.setUserId("KH96_01");
    userVO.setUserName("GKC");
    userVO.setUserPwd("123");

    return userVO;

}

测试结果

到此这篇关于SpringMvc请求处理参数 和 响应数据处理的文章就介绍到这了,更多相关SpringMvc请求处理内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

SpringMvc请求处理参数 和 响应数据处理的示例详解的更多相关文章

  1. JSP中springmvc配置validator的注意事项

    这篇文章主要介绍了JSP中springmvc配置validator的注意事项的相关资料,并说明springmvc中spring-servlet.xml、applicationContext.xml的区别需要的朋友可以参考下

  2. SpringMVC拦截器和异常处理器使用示例超详细讲解

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器参数及拦截器链配置,感兴趣的可以尝试一下

  3. SpringMVC数据页响应ModelAndView实现页面跳转

    本文主要介绍了SpringMVC数据页响应ModelAndView实现页面跳转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. SpringMVC静态资源配置过程详解

    在javaweb项目中配置了DispatcherServlet的情况下,如果不进行额外配置的话,几乎所有的请求都会走这个servlet来处理,默认静态资源按路径是访问不到的会报404错误,下面就来讲一讲如何配置才能访问到静态资源吧

  5. 详解SpringMVC中的四种跳转方式、视图解析器问题

    这篇文章主要介绍了SpringMVC的四种跳转方式、视图解析器,springmvc核心配置文件和视图解析器的使用,添加视图解析器,通过案例讲解四种跳转方式,需要的朋友可以参考下

  6. 详解SpringMVC的两种实现方式

    这篇文章主要介绍了SpringMVC的两种实现方式,方式一是通过实现Controller接口,方式二是使用注解开发,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下

  7. 浅谈ajax在jquery中的请求和servlet中的响应

    下面小编就为大家分享一篇浅谈ajax在jquery中的请求和servlet中的响应,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  8. SpringMVC程序简单实例

    这篇文章主要介绍了SpringMVC程序简单实例的相关资料,需要的朋友可以参考下

  9. SpringMVC常用注解载入与处理方式详解

    这篇文章主要介绍了SpringMVC常用注解载入的方式和处理的方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. SpringMVC上传文件的简单实例

    这篇文章主要介绍了SpringMVC上传文件的简单实例的相关资料,需要的朋友可以参考下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部