SpringMvc day1031

ok了家人们今天继续学习SpringMvc,let's go?

2.9****静态资源放行

编写类继承于 WebMvcConfigurationSupport ,重写
addResourceHandlers 方法,在类上添加 @Configuration 注
解。

  • addResourceHandler映射的地址,/**表示包含子孙目录

  • addResourceLocations表示物理存在的地址

  • 四个静态目录都进行了映射

java 复制代码
//当前类需要设置为配置类,并被扫描加载
@Configuration
public class SpringMvcSupport extends
WebMvcConfigurationSupport {
@Override
protected void
addResourceHandlers(ResourceHandlerRegistry
registry) {
//当访问/pages/xxxx时候,从/pages目录下查找
内容
registry.addResourceHandler("/pages/**").addRes
ourceLocations("/pages/");
registry.addResourceHandler("/js/**").addResour
ceLocations("/js/");
registry.addResourceHandler("/css/**").addResou
rceLocations("/css/");
registry.addResourceHandler("/plugins/**").addR
esourceLocations("/plugins/");
}
}

2.10 JSON数据参数传

  • 添加json数据转换相关坐标

因为 Springmvc 默认用
MappingJacksonHttpMessageConverter 对 json 数据进行
转换,需要添加 jackson 依赖。

XML 复制代码
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
  • 开启自动转换json数据的支持
java 复制代码
@Configuration
@ComponentScan({"com.lzw"})
@EnableWebMvc //开启SpringMVC JSON数据进行自动类型转换
public class SpringMvcConfig {
}
  • @RequestBody

作用:形参注解,将请求体所包含的数据传递给请求参数

  • 传递JSON数组
html 复制代码
<h2>JSON数据参数传递--传递JSON数组</h2>
<input type="button" value="点我"
onclick="fn01()"/>
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn01(){
var arrayJson=["张三","李四","王五"];
axios.post("http://localhost:8080/demo10",array
Json).then(function(response){
console.log(response.data);
});
}
</script>
java 复制代码
@RequestMapping("/demo10")
@ResponseBody
public String demo10(@RequestBody
List<String> list){
System.out.println(list);
return "success";
}
  • 传递JSON对象

json 数据与形参对象属性名相同,定义 POJO 类型形参即可接
收参数

html 复制代码
<h2>JSON数据参数传递--传递JSON对象</h2>
<input type="button" value="点我"
onclick="fn02()"/>
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn02(){
var objectJson=
{"id":1,"username":"张三","password":"123456"};
axios.post("http://localhost:8080/demo11",objec
tJson).then(function(response){
console.log(response.data);
});
}
</script>
java 复制代码
@RequestMapping("/demo11")
@ResponseBody
public String demo11(@RequestBody User user)
{
System.out.println(user);
return "success";
}
  • 传递JSON对象数组

json 数组数据与集合泛型属性名相同,定义 List 类型形参即可
接收参数

html 复制代码
<h2>JSON数据参数传递--传递JSON对象数组</h2>
<input type="button" value="点我"
onclick="fn03()"/>
javascript 复制代码
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn03(){
var objectArray=[
{"id":1,"username":"张三","password":"123456"},
{"id":2,"username":"李四","password":"123456"},
];
axios.post("http://localhost:8080/demo12",objec
tArray).then(function(response){
console.log(response.data);
});
}
</script>
java 复制代码
@RequestMapping("/demo12")
@ResponseBody
public String demo12(@RequestBody List<User>
list){
System.out.println(list);
return "success";
}

2.11****日期类型参数传递

相同的日期数据,可能会采用不同的日期格式,
Java 默认的时间格式: yyyy/MM/dd HH:mm:ss

html 复制代码
<h2>日期类型参数传递</h2>
<a href="http://localhost:8080/demo13?
id=1&birthday=2024/10/31">点我</a>
<a href="http://localhost:8080/demo13?
id=1&birthday=2024/10/31 12:12:12">点我</a>
<a href="http://localhost:8080/demo13?
id=1&birthday=2024-10-31">点我</a>
java 复制代码
@RequestMapping("/demo13")
@ResponseBody
public String demo13(User user){
System.out.println(user);
return "success";
}
java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
//private Date birthday;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
}

2.12****内置类型转换器

@EnableWebMvc功能:根据类型匹配对应的类型转换器

json → POJO

String → Date
默认情况下 ,SpringMVC 已经实现一些数据类型自动转换。
内置转换器全都在:
org.springframework.core.convert.support

java 复制代码
java.lang.Boolean -> java.lang.String :
ObjectToStringConverter
java.lang.Character -> java.lang.Number :
CharacterToNumberFactory
java.lang.Character -> java.lang.String :
ObjectToStringConverter
java.lang.Enum -> java.lang.String :
EnumToStringConverter
java.lang.Number -> java.lang.Character :
NumberToCharacterConverter
java.lang.Number -> java.lang.Number :
NumberToNumberConverterFactory
java.lang.Number -> java.lang.String :
ObjectToStringConverter
java.lang.String -> java.lang.Boolean :
StringToBooleanConverter
java.lang.String -> java.lang.Character :
StringToCharacterConverter
java.lang.String -> java.lang.Enum :
StringToEnumConverterFactory
java.lang.String -> java.lang.Number :
StringToNumberConverterFactory
java.lang.String -> java.util.Locale :
StringToLocaleConverter
java.lang.String -> java.util.Properties :
StringToPropertiesConverter

添加jackson的依赖
java.lang.String -> java.util.UUID :
StringToUUIDConverter
java.util.Locale -> java.lang.String :
ObjectToStringConverter
java.util.Properties -> java.lang.String :
PropertiesToStringConverter
java.util.UUID -> java.lang.String :
ObjectToStringConverter

**.**响应

3.1****响应页面

java 复制代码
@RequestMapping("/hello")
public String hello(){
System.out.println("Hello...");
return "success.jsp";
}

3.2****响应数据

3.2.1****具体操作
  • 添加jackson的依赖
XML 复制代码
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
  • 开启自动转换json数据的支持
java 复制代码
@Configuration
@ComponentScan({"com.lzw"})
@EnableWebMvc //开启SpringMVC JSON数据进行自动类
型转换
public class SpringMvcConfig {
}
  • @ResponseBody

表明响应的是数据本身而不是一个静态资源文件,不做页面跳
转。将方法返回的对象序列化为 JSON 或 XML 格式的数据发
送给客户端。在前后端分离的项目中使用!

3.2.2****响应文本数据
html 复制代码
<h2>响应文本数据</h2>
<a href="http://localhost:8080/demo13">点我
</a>
java 复制代码
@RequestMapping(value = "/demo13",produces =
"text/html;charset=utf-8")
@ResponseBody
public String demo13(User user){
System.out.println(user);
return "成功";
}
3.2.3响应JSON****数据
html 复制代码
<h2>响应JSON对象</h2>
<a href="http://localhost:8080/demo14">点我
</a>
<h2>响应JSON数组</h2>
<a href="http://localhost:8080/demo15">点我
</a>
java 复制代码
@RequestMapping(value = "/demo14",produces =
"application/json;charset=utf-8")
@ResponseBody
public User demo14(){
User user=new User(1,"张三","123456",new
Date());
return user;
}
@RequestMapping(value = "/demo15",produces =
"application/json;charset=utf-8")
@ResponseBody
public List<User> demo15(){
List<User> list=new ArrayList<>();
User u01=new User(1,"张三","123456",new
Date());
User u02=new User(2,"李四","123456",new
Date());
list.add(u01);
list.add(u02);
return list;
}

3.3****响应统一数据格式

html 复制代码
<h2>响应统一状态码</h2>
<input type="button" value="点我"
onclick="fn04()"/>
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn04(){
axios.post("http://localhost:8080/demo16").then
(function(response){
console.log(response);
console.log(response.data);
console.log(response.data.code);
console.log(response.data.msg);
console.log(response.data.data);
});
}
</script>
java 复制代码
@RequestMapping(value = "/demo16",produces =
"application/json;charset=utf-8")
@ResponseBody
public Result demo16(){
List<User> list=new ArrayList<>();
User u01=new User(1,"张三","123456",new
Date());
User u02=new User(2,"李四","123456",new
Date());
list.add(u01);
list.add(u02);
Result result=new Result(20000,"查询成
功",list);
return result;
}
java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private int code;//响应状态码
private String msg;//响应消息
private Object data;//响应数据
}

ok了家人们,明天见 byebye

相关推荐
还算善良_5 分钟前
【Vue】vue3实现文件预览组件(预览服务使用kkfileview)
javascript·vue.js·ecmascript
tangdou3690986556 分钟前
AI真好玩系列-Three.js手势控制游戏开发教程 | Interactive Game Development with Three.js Hand Con
前端·人工智能·ai编程
七夜zippoe8 分钟前
基于ReAct框架的智能体构建实战 - 从原理到企业级应用
前端·javascript·react.js·llm·agent·react
qinyuan159 分钟前
使用husky和fabric规范git提交的注释
前端·后端
T___T9 分钟前
偷看浏览器后台,发现它比我忙多了
前端·浏览器
alamhubb10 分钟前
vue也支持声明式UI了,向移动端kotlin,swift看齐,抛弃html,pug升级版,进来看看新语法吧
前端·javascript·前端框架
毕设源码-邱学长10 分钟前
【开题答辩全过程】以 基于web的心理测评系统的设计与实现为例,包含答辩的问题和答案
前端
Composure13 分钟前
在 UmiJS + Vue 3 项目中实现 WebP 图片自动转换和优化
前端·javascript
我是苹果,不是香蕉16 分钟前
【python调用edge driver报错】
前端·edge
Neptune121 分钟前
js入门指南之Promise:从''承诺''到理解,告别回调地域
前端·javascript