当前位置: 首页 > article >正文

SpringBoot框架Web开发

1. 控制器开发

(1) JSON的支持

Spring Boot默认支持JSON格式的数据交换,主要通过以下方式实现:

  • 依赖spring-boot-starter-web 依赖包已经包括了 Jackson,用于将Java对象序列化为JSON,以及将JSON反序列化为Java对象
  • 注解:使用 @RequestBody 注解将请求体中的JSON数据转换为Java对象,使用 @ResponseBody 注解将Java对象转换为JSON响应
  • 配置:可以通过 application.propertiesapplication.yml 文件配置JSON序列化和反序列化的细节,如日期格式、字段忽略等
@RestController
public class SampleController {
    @GetMapping("/user")
    public User getUser() {
        return new User("张三");
    }

    @PostMapping("/user")
    public User postUser(@RequestBody User user) {
        return user;
    }
}

(2) RESTful的支持

Spring Boot支持RESTful API的开发,可以使用以下注解来实现:

  • @RestController:用于定义RESTful控制器,结合@RequestMapping@GetMapping@PostMapping等注解处理HTTP请求
  • @PathVariable:用于提取URL路径中的参数
  • @RequestParam:用于提取请求参数
  • @RequestBody:用于接收请求体中的数据
@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable("id") Long id) {
        
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        
    }
}

(3) Web测试的支持

Spring Boot提供了强大的测试支持,主要通过以下方式:

  • @SpringBootTest:用于启动整个Spring应用程序上下文,用于集成测试
  • @WebMvcTest:用于测试Spring MVC控制器,加载Spring MVC相关组件而不启动整个应用上下文
  • MockMvc:用于模拟HTTP请求和响应,进行控制器层的测试
@SpringBootTest
public class UserControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetUser() throws Exception {
        mockMvc.perform(get("/users/1"))
               .andExpect(status().isOk())
               .andExpect(jsonPath("$.name").value("张三"));
    }
}
2. 视图开发

(1) SpringBoot整合JSP

Spring Boot支持JSP视图模板,但需要一些配置:

  • 依赖:添加 spring-boot-starter-tomcat 依赖(使用provided范围)和 spring-boot-starter-web
  • 配置:在 application.propertiesapplication.yml 中配置视图解析器,指定JSP文件的位置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

(2) 静态资源引入

Spring Boot默认支持静态资源的引入,资源文件可以放在以下目录中:

  • src/main/resources/static
  • src/main/resources/resources
  • src/main/resources/META-INF/resources

访问静态资源时,可以直接通过URL路径访问。

(3) 支持热部署

Spring Boot支持热部署,可以通过以下方式实现:

  • Spring Boot DevTools:一个开发工具,可以通过 spring-boot-devtools 依赖实现自动重启和热部署功能
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
3. 过滤器和拦截器

(1) 自定义过滤器

自定义过滤器用于在请求处理之前或之后执行一些操作,例如日志记录、请求检查等:

  • 实现:实现 javax.servlet.Filter 接口,重写 doFilter 方法
  • 注册:通过 @Component 注解自动注册,或在 WebMvcConfigurer 中进行注册
@Component
public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
       
        chain.doFilter(request, response);
    }
}

(2) 自定义拦截器

自定义拦截器用于在请求处理前后执行操作,例如权限验证:

  • 实现:实现 HandlerInterceptor 接口,重写 preHandlepostHandleafterCompletion 方法
  • 注册:通过 WebMvcConfigureraddInterceptors 方法注册
@Component
public class CustomInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
            throws Exception {
        return true;
    }
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomInterceptor());
    }
}
4. 打包部署

(1) 多环境配置

Spring Boot支持不同的环境配置,可以通过以下方式实现:

  • 配置文件:使用 application-{profile}.propertiesapplication-{profile}.yml 来定义不同环境的配置
  • 激活配置:通过 spring.profiles.active 属性激活指定的环境配置
# application-dev.properties
spring.datasource.url=jdbc:mysql://localhost:3306/devdb

# application-prod.properties
spring.datasource.url=jdbc:mysql://localhost:3306/proddb
# application.properties
spring.profiles.active=dev

(2) 服务器配置

Spring Boot应用可以打包成独立的JAR或WAR文件:

  • JAR包:适合嵌入式服务器的应用,通常使用 spring-boot-maven-plugin 插件进行打包
  • WAR包:适合传统的Web服务器部署,需继承 SpringBootServletInitializer 并重写 configure 方法

可以直接在pom.xml中进行配置

<<!-- 任选其一 -->
<packaging>jar</packaging>
<packaging>war</packaging>

(3) 项目打包

项目打包可通过以下步骤完成:

  • Maven/Gradle打包:使用Maven或Gradle进行项目打包
  • 打包命令:使用 mvn clean package./gradlew build 命令生成JAR或WAR文件
mvn clean package

http://www.kler.cn/news/307074.html

相关文章:

  • 第十一章 【后端】商品分类管理微服务(11.1)——创建父工程
  • Python 实现 LM 算法(Levenberg-Marquardt)
  • PCIe进阶之TL:First/Last DW Byte Enables Rules Traffic Class Field
  • Linux命令分享 四 (ubuntu 16.04)(vi操作文件)
  • 第十七节:学习Hutool上传文件(自学Spring boot 3.x的第四天)
  • C++比大小游戏
  • 虚幻引擎Gameplay探索 Actor 之间的高效通信与交互技巧一
  • 鹏哥C语言39---goto语句(关机程序 )
  • UE4_后期处理六—复古电视效果
  • 【HCIA-Datacom】华为VRP系统
  • 利用Leaflet.js创建交互式地图:绘制固定尺寸的长方形
  • uniapp uni-table合并单元格
  • .SUFFIXES:
  • openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
  • Redis面试题整理
  • 信息学奥赛:青少年编程的高光舞台,通向未来科技的敲门砖
  • 冒泡,选择,快速-排序
  • nestjs cache manager 很ioredis配合使用方案
  • Python Pyvis库创建交互式网络图 高级功能详解
  • 设计模式---中介者模式
  • 智能客服 | AI助理与内部知识库如何优化用户体验
  • 机器学习-深度学习数据集之打架斗殴识别数据集
  • Mysql InnoDB 存储引擎简介
  • Python 解析 JSON 数据
  • RabbitMQ高级篇,进阶内容
  • 【题解】AT_arc035_b [ARC035B] アットコーダー王国のコンテスト事情
  • 手势开关灯
  • 宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)
  • 【Kubernetes】常见面试题汇总(十八)
  • git rev-parse