springboot中静态资源

classpath就是resource文件夹下

欢迎页规则

项目启动默认去找静态资源下的index.html页面 默认访问该页面

favicon原则

在静态资源目录下寻找favicon.ico

缓存实验

在请求中使用Cache-Control 时,它可选的值有:

在响应中使用Cache-Control 时,它可选的值有:

配置浏览器缓存

spring:web:locale: zh_CN # 国际化的区域信息resources:add-mappings: true #开启静态资源映射cache:period: 3600 #缓存时间 以秒为单位cachecontrol:  # 缓存详细控制 覆盖上面的配置max-age: 7200

自定义静态资源配置

spring:web:locale: zh_CN # 国际化的区域信息resources:# 修改resource文件夹下的静态资源路径static-locations: classpath:/a/, classpath:/a/mvc:webjars-path-pattern: /wj/**# 静态资源访问前缀static-path-pattern: /static/**

路径匹配

ant风格路径匹配

默认使用新版pathpattern路径匹配

不能匹配**在中间的情况,剩下的与ant风格兼容

配置文件改变路径匹配策略:

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

内容协商

1.多端内容适配

第二种方法需要自行开启

2.效果演示

请求同一个接口,返回json和xml不同格式数据

1.引入依赖

<!--        引入xml相关依赖-->
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>
</dependency>

2.加入注解

在数据类型中加入

@Data
@AllArgsConstructor
@NoArgsConstructor
@JacksonXmlRootElement
//可以讲数据转化为xml格式
public class Person {private long id;private String name;private String email;private Integer age;
}

3.配置协商规则

开启基于参数传递格式
spring:mvc:contentnegotiation:favor-parameter: true   # 默认参数为formatparameter-name: type    # 修改参数名

效果演示:

根据type类型返回不同的内容格式

自定义内容返回

1.增加yaml返回支持

导入依赖:

<!--        导入支持yaml解析的模块-->
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

编写配置:

spring:mvc:contentnegotiation:media-types:yaml: text/yaml

增加HttpMessageConverter组件

例如:MyYamlHttpMessageConverters

public class MyYamlHttpMessageConverters extends AbstractHttpMessageConverter {private ObjectMapper objectMapper=null;public MyYamlHttpMessageConverters(){//告诉springboot支持什么媒体类型(对应配置文件中的)super(new MediaType("application", "yaml", Charset.forName("utf-8")));//禁用文档开始前出现的横线YAMLFactory Factory = new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER);this.objectMapper = new ObjectMapper(Factory);}@Overrideprotected boolean supports(Class clazz) {//只要是对象类型都支持转换return true;}@Override  //requestbodyprotected Object readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {return null;}@Override   //responsebody 把对象写出去protected void writeInternal(Object returnValue, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {OutputStream body = outputMessage.getBody();try {this.objectMapper.writeValue(body,returnValue); //把对象返回值写出去}catch (Exception e){e.printStackTrace();}finally {body.close();}}
}

在配置文件中加入:

//配置一个能把对象转为yaml的MessageConverters
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new MyYamlHttpMessageConverters());
}

内容协商原理

httpmessageconverter

系统默认:


错误处理

1. 错误处理流程:

能处理就处理处理不了就转发给springboot处理,先精确匹配,找模板引擎下的,找不到就去静态资源下找,后模糊匹配,先找模板引擎下的,找不到就去静态资源下找,如果都没有具体页面,再去匹配error页面,若也没有,springboot会提供默认error页面

2. 错误页面解析:

如果没有配置错误处理,就会使用默认的错误页面error

规则:

  1. 解析一个错误页
    1. 如果发生了500,404,403错误(精确匹配)
      1. 如果有模板引擎,默认在classpath:/templates/error/精确码.html
      2. 如果没有模板引擎,在静态资源文件夹下找精确码.html
    1. 如果精确找不到精确码.html,就去找5xx.html,4xx.html(模糊匹配)
      1. 如果有模板引擎,默认在classpath:/templates/error/5xx.html
      2. 如果没有模板引擎,在静态资源文件夹下找 5xx.html
  1. 如果没有模板引擎templates下有error.html页面就直接渲染
  2. 如果都没有,容器中有一个默认为error的view,提供了默认白页功能。
@Bean(name="error")
@CondiontionalOnMissingBean(name="error")
public View defaultErrorView(){return this.defaultErrorView
}

3. 最佳实战

嵌入式容器

Servlet容器:管理,运行Servlet组件(Servlet,Filter,Listener)的环境,一般指服务器

1.自动配置原理

Web新特性

1.Problemdetails

配置开启:

spring:mvc:problemdetails:enabled: true   #启动

开启后效果:使用新的MediaType类型

content-type+json+额外扩展返回

2.函数式Web

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88187.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88187.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88187.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现

摘要随着能源问题日益突出&#xff0c;电力能耗数据分析对于提高能源利用效率、降低能源消耗具有重要意义。本文设计并实现了一个基于 Python Django 和 Spark 的电力能耗数据分析系统。系统采用前后端分离架构&#xff0c;前端使用 Django 框架实现用户界面&#xff0c;后端使…

elementUI vue2 前端表格table数据导出(二)

为啥前端导出不在赘述了&#xff0c;不然读者也难看到这篇文章。第一步&#xff1a;安装依赖npm install vue-json-excel第二步&#xff1a;引用依赖配置// 导出Excel文件组件 import JsonExcel from vue-json-excel; Vue.component(downloadExcel, JsonExcel)第三步&#xff1…

RabbitMQ 4.1.1-Local random exchange体验

Local Random Exchange 一种 RabbitMQ 4.0 引入的新型交换机&#xff0c;主要是为 request-reply&#xff08;RPC&#xff09;场景 设计的。 使用这种交换机时&#xff0c;消息只会被路由到本地节点上的队列&#xff0c;可以确保极低的消息发布延迟。如果有多个本地队列绑定到该…

中山排气歧管批量自动化智能化3D尺寸测量及cav检测分析

当前制造业快速发展&#xff0c;传统测量方法正面临严峻挑战。生产规模的持续扩张使得现有测量手段逐渐暴露出效率不足的问题&#xff0c;这种技术滞后性正在直接影响企业的整体生产效率。具体表现为测量速度跟不上生产节拍&#xff0c;精度要求难以达标&#xff0c;最终导致生…

Debian 11 Bullseye 在线安装docker

首先移除所有错误的 Docker 软件源&#xff1a;sudo rm -f /etc/apt/sources.list.d/docker*安装必要依赖sudo apt update sudo apt install -y ca-certificates curl gnupg添加 Docker 官方 GPG 密钥&#xff08;使用国内镜像&#xff09;&#xff1a;curl -fsSL https://mirr…

Spring Boot 项目中多数据源配置使用场景

在 Spring Boot 中配置多数据源是一个非常常见的需求&#xff0c;主要用于以下场景&#xff1a; 读写分离&#xff1a;一个主数据库&#xff08;Master&#xff09;负责写操作&#xff0c;一个或多个从数据库&#xff08;Slave&#xff09;负责读操作&#xff0c;以提高性能和可…

FAAC 在海思平台使用得到aac实时音频流

FAAC 在海思平台使用得到aac实时音频流 使用 FAAC将音频 pcm转为 aac 主要参见这篇博客 FAAC 在君正平台使用得到aac实时音频流_君正 x2600 音频-CSDN博客

javascript函数参数类似python函数参数星号*解耦数组

序言通常情况下&#xff0c;我们很可能不清楚参数有多少&#xff0c;这个时候用的都是数组。但是使用数组和单个元素&#xff0c;从内心情感来说&#xff0c;它们是两种维度&#xff0c;为了让参数成为一个数组&#xff0c;把单个输入的参数强加一个数组的外壳&#xff0c;并不…

C语言基础(1)

1.编译器的选择 我们的c语言是一门&#xff0c;我们写的c语言代码是文本文件(存放在.c为后缀的文件中)&#xff0c;文本文件本身无法被执行&#xff0c;必须通过编译器的编译和链接器的链接&#xff0c;生成可执行的二进制文件&#xff0c;才能够被执行注意&#xff1a; 每个源…

Rust赋能美团云原生DevOps实践

Rust 云原生 DevOps 实践 在云原生环境中,Rust 的高性能与安全性使其成为构建微服务和基础设施工具的理想选择。Docker 作为容器化标准工具,结合 Rust 的跨平台特性,可高效实现持续集成与部署(CI/CD)。 构建优化的 Rust Docker 镜像 多阶段构建是 Rust 项目容器化的关键…

计算机网络实验——配置ACL

ACL基础一、实验目的1. 配置H3C路由器基本ACL。二、实验要求1. 熟练掌握网络配置能力。2. 熟练掌握ACL基本配置。三、实验步骤&#xff08;1&#xff09;使用reset saved-configuration命令和reboot命令&#xff0c;重置路由器原有配置&#xff0c;如图1所示。图 1&#xff08;…

在本地部署mcp服务器实现自然语言操作mysql数据库,轻松实现数据表的增~ 删~ 改~ 查~

1.将写好的mcp_server代码放在本地任意盘&#xff01; import asyncio import logging import os import sys from mysql.connector import connect, Error from mcp.server import Server from mcp.types import Resource, Tool, TextContent from pydantic import AnyUrl# Co…

2025快手创作者中心发布视频python实现

难度还行&#xff0c;只有一个__NS_sig3加密&#xff0c;流程麻烦点cookies_list cookie.split("; ")cookie_dict {}# 遍历每个 Cookie&#xff0c;根据等号将键值对拆分并添加到字典中for cookie in cookies_list:key_value cookie.split("")if len(ke…

Android 组件内核

文章目录什么是binder1. 什么是Binder&#xff1f;2. Binder架构组成3. 工作原理与通信流程1&#xff09;服务注册2&#xff09;服务查询3&#xff09;通信过程4&#xff09;核心数据结构4. 关键技术点5. 常见面试考点1&#xff09;Binder与传统IPC&#xff08;Socket、管道、共…

java类加载机制:Tomcat的类加载机制

Tomcat类加载机制深度解析&#xff1a;打破双亲委派的Web容器实现 Tomcat作为Java Web容器&#xff0c;其类加载机制为满足Web应用的隔离性、热部署和兼容性需求&#xff0c;对标准Java类加载机制进行了定制化扩展&#xff0c;核心是打破双亲委派模型并引入多层级类加载器。以下…

【PTA数据结构 | C语言版】从顺序表 list 中删除第 i 个元素

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个整数存入顺序表&#xff0c;对任一指定的第 i 个位置&#xff0c;将这个位置上的元素从顺序表中删除。注意&#xff1a;i 代表位序&#xff0c;从 1 开始&#xff0c;…

VS2022 C++ EasyX库 扫雷游戏项目开发:打造经典游戏的详细之旅

老样子&#xff0c;先上效果 视频演示 C经典扫雷-介绍一、引言 在这篇博客中&#xff0c;我将详细介绍扫雷游戏项目的开发过程。扫雷作为一款经典的游戏&#xff0c;其规则简单但富有挑战性。通过开发这个项目&#xff0c;我不仅加深了对 C 编程的理解&#xff0c;还提升了自己…

Go语言网络游戏服务器模块化编程

本文以使用origin框架&#xff08;一款使用Go语言写的开源游戏服务器框架&#xff09;为例进行说明&#xff0c;当然也可以使用其它的框架或者自己写。 在框架中PBProcessor用来处理Protobuf消息&#xff0c;在使用之前&#xff0c;需要使用Register函数注册网络消息&#xff…

【机器人】Aether 多任务世界模型 | 4D动态重建 | 视频预测 | 视觉规划

Aether 是一个的世界模型&#xff0c;整合几何重建与生成建模的统一框架&#xff0c;实现类人空间推理能力。 来自ICCV 2025&#xff0c;该框架具有三大核心功能&#xff1a; (1) 4D动态重建&#xff0c;(2) 动作条件视频预测&#xff0c; (3) 目标条件视觉规划。 代码地址&…

MiniMind:3小时训练26MB微型语言模型,开源项目助力AI初学者快速入门

开发&#xff5c;界面&#xff5c;引擎&#xff5c;交付&#xff5c;副驾——重写全栈法则&#xff1a;AI原生的倍速造应用流来自全栈程序员 nine 的探索与实践&#xff0c;持续迭代中。 欢迎关注评论私信交流~ 在大型语言模型(LLaMA、GPT等)日益流行的今天&#xff0c;一个名为…