Spring_MVC 笔记(二)

1、Json数据传输参数

之前我们知道,现在比较流行的开发方式是异步调用,前后台以异步方式进行交换,传输的数据使用的就是JSON,所以前端如果发送的是JSON数据,后端怎么接收捏?、

对于JSON数据类型,我们常见的有三种方式:

1、json普通数组(["value1","value2","value3",.....])

2、json对象({key1 : value1 , key2 : value2 , .......})

3、json对象数组([{key1:value1,value2,....} , {key2:value1,value2,....} , .......])

我们需要用我们要用jackson来处理json的转化,所以现在pom.xml中添加jackson的依赖。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>

然后要开启SpringMVC 注解支持

@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}

1.1、Json普通数组

  @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("/save")
        @ResponseBody
        public String save(@RequestBody List<String> ans){
            System.out.println("传递参数===>"+ans);
            return "{'stukk':'user'}";
        }
    }

 

 

 

1.2、Json对象数据

然后在参数前面添加@RequestBody

@Controller
@RequestMapping("/ball")
public class BallController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(@RequestBody Ball ball){
        System.out.println("ball ===> "+ball);
        return "{'stukk':'ball'}";
    }
}

 

1.3、Json对象数组


    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("/save")
        @ResponseBody
        public String save(@RequestBody List<Ball> ans){
            System.out.println("传递参数===>"+ans);
            return "{'stukk':'user'}";
        }
    }

小结

SpringMVC接收JSON数据的实现步骤为:

(1)导入jackson包

(2)使用PostMan发送JSON数据

(3)开启SpringMVC注解驱动,在配置类上添加@EnableWebMvc注解

(4)Controller方法的参数前添加@RequestBody注解

知识点1:@EnableWebMvc

名称@EnableWebMvc
类型==配置类注解==
位置SpringMVC配置类定义上方
作用开启SpringMVC多项辅助功能

知识点2:@RequestBody

名称@RequestBody
类型==形参注解==
位置SpringMVC控制器方法形参定义前面
作用将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

@RequestBody与@RequestParam区别

  • 区别

    • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】

    • @RequestBody用于接收json数据【application/json】

  • 应用

    • 后期开发中,发送json格式数据为主,@RequestBody应用较广

    • 如果发送非json格式数据,选用@RequestParam接收请求参数

 关于日期的传递:有多种形式,主要yyyy-mm-dd、yyyy/mm/dd、dd/mm/yyyy .......

2、响应

SpringMVC接收到请求和数据后,进行一些了的处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户。

比如:根据用户ID查询用户信息、查询用户列表、新增用户等。

对于响应,主要就包含两部分内容:

  • 响应页面

  • 响应数据

    • 文本数据

    • json数据

因为异步调用是目前常用的主流方式,所以我们需要更关注的就是如何返回JSON数据,对于其他只需要认识了解即可。

2.1、响应页面

设置返回页面

写一个简单的JSP试一试 

    @Controller
    public class UserController {
        @RequestMapping("/user")
        public String save(){
            System.out.println("相应页面");
            return "Hello.jsp";
        }
    }

把@RequestBody去掉,不然还是返回文本数据形式

 页面就出来了。

2.2、响应文本数据

    @Controller
    public class UserController {
        @RequestMapping("/user")
        @ResponseBody
        public String save(){
            System.out.println("相应文本数据");
            return "Hello.jsp";
        }
    }

(同样的代码,加上@ResponseBody)

 出来就不是页面了,而是一条字符串。

2.3、相应JSON对象

@Controller
public class UserController {
    
    @RequestMapping("/user")
    @ResponseBody
    public User toJsonPOJO(){
        System.out.println("返回json对象数据");
        User user = new User();
        user.setName("itcast");
        user.setAge(15);
        return user;
    }
    
}

知识点1:@ResponseBody

名称@ResponseBody
类型==方法\类注解==
位置SpringMVC控制器方法定义上方和控制类上
作用设置当前控制器返回值作为响应体, 写在类上,该类的所有方法都有该注解功能
相关属性pattern:指定日期时间格式字符串

说明:

  • 该注解可以写在类上或者方法上

  • 写在类上就是该类下的所有方法都有@ReponseBody功能

  • 当方法上有@ReponseBody注解后

    • 方法的返回值为字符串,会将其作为文本内容直接响应给前端

    • 方法的返回值为对象,会将对象转换成JSON响应给前端

此处又使用到了类型转换,内部还是通过Converter接口的实现类完成的,所以Converter除了前面所说的功能外,它还可以实现:

  • 对象转Json数据(POJO -> json)

  • 集合转Json数据(Collection -> json)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stu_kk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值