目录
六、SpringMVC 前后端交互-@ResponseBody
一、SpringMVC介绍
SpringMVC框架主要功能: 实现前后端的交互.
交互:
1. 前端通过http请求可以携带参数访问后端服务器. 请求
2. 后端服务器可以将结果通过响应交还给前端. 响应
二、SpringMVC入门案例
1.创建项目springdemo_mvc1
2.关于tomcat端口号说明
SpringMVC框架使用需要借助tomcat服务器. 默认端口号8080. 可以随意修改.
# 应用名称
spring.application.name=springmvc_demo1
# 应用服务 WEB 访问端口
server.port=8080
3.关于tomcat服务器操作
4. 框架之间的关系图
5. 编辑UserController
package com.jt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller //将类交给SpringMVC管理,SpringMVC交给Spring容器管理
@ResponseBody //将数据转化为"特殊字符串"返回
public class UserController {
/**
* URL地址: http://localhost:8080/hello get请求
* http://localhost:8080/dog get请求
* http://localhost:8080/cat get请求
* 参数: 无
* 返回值: "你好,SpringMVC"的字符串
*/
@RequestMapping("/hello")
public String hello(){
return "你好,SpringMVC";
}
}
三、SpringMVC参数接收
1.简单参数传递
需求: 查询后端数据 参数2个数据 name=tomcat,age=18岁
URL: http://localhost:8080/findUserByNA?name=tomcat&age=18
/**
* 需求: 接收参数 name=xxx age=xxx
* URL: http://localhost:8080/findUserByNA?name=tomcat&age=18
* 返回值: "数据正确:name:age"
* 知识点:
* 1.通过url中的key获取数据.
*/
@RequestMapping("/findUserByNA")
public String findUserByNA(String name,int age){
return "数据正确:"+name+":"+age;
}
2.对象方式传参
-1.编辑User的POJO
说明:
1. 属性类型 必须为包装类型
2. POJO 必须添加get/set方法
3. POJO类型必须实现序列号接口
package com.jt.pojo;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
/*必须添加set/get方法/toString*/
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
-2.编辑UserController
/**
* 需求: 接收参数 name=xxx age=xxx
* URL: http://localhost:8080/findUserByNA2?name=tomcat&age=18
* 返回值: user.toString 字符串
* 知识点:
* 1.通过url中的key获取数据.
* 2.如果参数众多,则可以使用对象的方式接收,要求必须有set方法
*/
@RequestMapping("/findUserByNA2")
public String findUserByNA2(User user){
return user.toString();
}
-3.响应结果
3.同名提交问题
-1.案例说明
说明: 如果遇到同名提交问题,数据一般采用,号的方式连接. 如图所示:
-2.编辑UserController
/**
* URL:http://localhost:8080/hobby?hobby=敲代码,睡觉,打游戏,熬夜
* 参数: hobby=敲代码,睡觉,打游戏,熬夜
* 返回值: 获取的参数返回即可
* 知识点: 如果遇到同名提交问题.则SpringMVC可以采用数组接收.内部自动完成分割
* 底层实现: hobby.split(",");
*/
@RequestMapping("/hobby")
public String hobby(String[] hobby){
/* String[] array = hobby.split(",");
System.out.println(array[0]);*/
//数组转化为字符串
return Arrays.toString(hobby);
}
四、 restFul风格
1.传统get方式提交
传统方式:
url1: http://localhost:8080/findUser?name=tomcat&age=18
简化写法:
url2: http://localhost:8080/findUser/tomcat/18/男
2.restFul风格说明
要求:
1. restFul的风格数据的位置一旦确定,不能修改.
2. 参数与参数之间使用"/"的方式分割.
3. restFul的风格适用于 get/post/put/delete 请求类型
请求类型种类: (8种)
3.编辑后端Controller
/**
* URL地址:
* http://localhost:8080/findUser/tomcat/18/男 get类型
* 参数: name/age/sex
* 返回值: 返回值获取的数据
* restFul语法:
* 1. 参数与参数之间使用/分割
* 2. 需要接收的参数使用{}包裹
* 3. 参数接收时采用@PathVariable取值
*/
@RequestMapping("/findUser/{name}/{age}/{sex}")
public String findUser(@PathVariable String name,
@PathVariable int age,
@PathVariable String sex){
return name+":"+age+":"+sex;
}
4. 测试效果
五、 JSON
1. JSON介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,可以理解为一个字符串
2.JSON格式-对象格式
对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。`
{"id": "100","name": "tomcat", "age": "18"}
3.JSON格式-数组格式
数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
[100,"张三",true]
4.JSON格式-嵌套格式
值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
[100,true,["a","b",{"name":"张三","hobbys": ["吃饭","睡觉"]}]]
六、SpringMVC 前后端交互-@ResponseBody
1.业务说明
问题说明1: 前端访问后端服务器,一般采用Ajax方式进行数据传递. 后端服务器返回给前端页面 通常采用JSON格式数据
问题说明2: 后端服务器怎么接收前端的参数的. servlet机制
-1.案例测试
/*
* url:http://localhost:8080/findJSON?name=tomcat&age=18 get
* 参数:name=tomcat&age=18
* 返回值:User对象的JSON
* 知识点:
* 1.返回值为对象,则@ResponseBody将返回值转化为JSON串
* 2.如果返回String类型,则@ResponseBody将字符串本身返回给前端
* */
@RequestMapping("/findJSON")
//@ResponseBody //将返回值转化为JSON串
public User findJSON(User user){
//在业务层扩展数据
user.setId(101);
user.setSex("男");
return user;
}
-2.测试结果
2.@RestController注解
package com.jt.controller;
import com.jt.pojo.User;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
//@Controller //将类交给SpringMVC管理
//@ResponseBody //当前类中的所有方法 都返回JSON串
@RestController // = @Controller + @ResponseBody
@RequestMapping("/rest")
public class RestUserController {
/**
* 注意事项:
* 1.springMVC中的请求路径不能重复!!!!
* 2.可以@RequestMapping("/业务名称")自定义前缀
* @return
*/
@RequestMapping("/findJSON")
public User findUser(User user){
user.setId(105);
user.setSex("男");
return user;
}
}