当前位置:   article > 正文

springMVC

springMVC

springMVC技术与servlet技术相同,均属于web层开发技术。

springMVC是一种基于Java实现MVC模型的轻量级web框架。springMVC中的bean仅仅指的是表现层的bean,不包括数据层和业务逻辑层的bean,为了避免springConfig错误的加载到springMVC的bean,我们需要在springConfig加载控制的bean时去掉springMVC控制的bean,也就是表现层的bean。

springConfig去掉表现层的bean的方法有俩种:

  法一:不加载表现层的bean

  1. package org.example.config;
  2. import org.springframework.context.annotation.ComponentScan;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.context.annotation.FilterType;
  5. import org.springframework.stereotype.Controller;
  6. @Configuration
  7. //在spring加载控制bean时,去掉加载的springMVC控制的bean
  8. //法一:不加载表现层的bean
  9. @ComponentScan({"org.example.dao","org.example.service"})
  10. public class springConfig {
  11. }

 法二:把表现层的bean从扫描的范围中去掉

  1. package org.example.config;
  2. import org.springframework.context.annotation.ComponentScan;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.context.annotation.FilterType;
  5. import org.springframework.stereotype.Controller;
  6. @Configuration
  7. //在spring加载控制bean时,去掉加载的springMVC控制的bean
  8. //法二:把表现层的bean从扫描范围中去掉
  9. @ComponentScan(value = "org.example",
  10. excludeFilters = @ComponentScan.Filter(
  11. type = FilterType.ANNOTATION, //按注解排除扫描的bean
  12. classes = Controller.class //告诉它排除什么注解的bean
  13. )
  14. )
  15. public class springConfig {
  16. }

然后是springMVCConfig的配置

  1. package org.example.config;
  2. import org.springframework.context.annotation.ComponentScan;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  5. @Configuration
  6. @ComponentScan("org.example.Controller")
  7. @EnableWebMvc
  8. public class springMVCConfig {
  9. }

@EnableWebMvc  接收json数据时,开启json数据转换为我们需要的数据类型对象   这仅仅是该注解的功能之一。

然后是Controller层的代码:

  1. package org.example.Controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. @RequestMapping("/postman")
  6. public class userRequest {
  7. }

@Controller 注解 表示该类为表现层的bean

@RequestMapping("/postman") 该注解用于声明访问该类的路径http://localhost:8080/postman/*   可以访问该类中的所有方法。

表现层的方法:

        传入简单类型的数据:

  1. package org.example.Controller;
  2. import org.example.pojo.user;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestBody;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. @Controller
  8. @RequestMapping("/postman")
  9. public class userRequest {
  10. @RequestMapping("/postman1")
  11. @ResponseBody //作用是把return的返回值作为响应数据
  12. public String postman1(String name,int age){ //将get请求的参数作为形参输入就可以接收了。
  13. System.out.println("name==>"+name);
  14. System.out.println("age==>"+age);
  15. return "{'module':'postman1'}";
  16. }
  17. }

@RequestMapping("/postman1")注解是声明该方法的访问路径,http://localhost:3306/postman/postman1?name=zhangsan&age=18 就可以访问到该类中的该方法。并把参数传入,注意访问路径中的参数与方法中形参的名字要一致。

@ResponseBody 注解是把return的返回值作为响应数据。

      请求路径参数名与形参名不一致时

  1. @RequestMapping("/postman2")
  2. @ResponseBody
  3. public String postman2(@RequestParam("name") String username, int age){
  4. System.out.println("name==>"+username);
  5. System.out.println("age==>"+age);
  6. return"{'module':'postman2'}";
  7. }

@RequestParam注解是把请求路径参数name的值对应到该形参。

      

       传入引用类型的数据:对引用类型数据的默认处理是先把引用类型数据创建出一个对象,然后把获取的数据参数insert到对象中。

  1. @RequestMapping("/postman3")
  2. @ResponseBody
  3. public String postman3(user user){
  4. System.out.println("user==>"+user);
  5. return "{'module':'postman3'}";
  6. }

   如果user对象中的有引用类型的数据时需要按图中所例进行传参

     

         传入数组数据

  1. //数组参数
  2. @RequestMapping("/postman5")
  3. @ResponseBody
  4. public String postman5(String[] likes){
  5. System.out.println("likes==>"+ Arrays.toString(likes));
  6. return "{'module':'postman5'}";
  7. }

     传入集合对象 

  1. @RequestMapping("/postman6")
  2. @ResponseBody
  3. public String postman6(@RequestParam List<String> likes){
  4. System.out.println("likes==>"+likes);
  5. return "{'module':'postman6'}";
  6. }

因为引用类型数据list集合是个接口,没有构造方法所以不能创建对象,所以不能用默认的方法,
    解决办法:加上@RequestParam注解,告诉它,是把获取的请求参数放入list集合中,而不是作为list集合的属性。

   传入json格式的集合

  1. @RequestMapping("/postman7")
  2. @ResponseBody
  3. public String postman7(@RequestBody List<String> likes){
  4. System.out.println("likes==>"+likes);
  5. return "'module':'postman7'";
  6. }

  因为此时数据我们写在了请求体中,不能用requestParam了,需要换成requestBody。

        传入json格式的引用类型数据:

  1. @RequestMapping("/postman8")
  2. @ResponseBody
  3. public String postman8(@RequestBody user user){
  4. System.out.println("user==>"+user);
  5. return "'module':'postman8'";
  6. }

     

    传入日期类型数据:

  1. @RequestMapping("/postman10")
  2. @ResponseBody
  3. public String postman10(Date date,
  4. @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
  5. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date2){
  6. System.out.println("date==>"+date);
  7. System.out.println("date1==>"+date1);
  8. System.out.println("date2==>"+date2);
  9. return "{;module':'postman10'}";
  10. }

日期,年月日之间的分隔符,/ 可以直接用; - 因为格式不匹配,需要加@DateTimeFormat注解来配格式。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号