spring MVC实践需要注意的地方

简介: spring MVC实践需要注意的地方

这篇文章主要介绍了spring MVC实践需要注意的地方,帮助大家更好的理解和学习使用spring MVC,感兴趣的朋友可以了解下

目录

请求参数校验:

    对于url中的参数

    对于request body请求体中的参数

响应数据格式:

全局异常处理

统一定义异常响应码,便于查看

使用spring mvc提供restful风格的接口,实现前后端分离,后端只提供数据接口,而不做页面渲染。因此可对接口做统一处理:

请求参数校验

响应数据格式

全局异常处理

通过以上统一处理,开发人员可专注于业务处理,把校验,异常响应的逻辑分离出来。

请求参数校验:

对于url中的参数

如果添加@RequestParam,但没有传递该参数,则抛出MissingServletRequestParameterException异常

如果添加@Max等注解,同时不满足该条件,抛出ConstraintViolationException 或BindException异常

对于request body请求体中的参数

Bean前添加@RequestBody,如果没有请求体,抛出HttpMessageNotReadableException异常

在bean前添加@Validate注解,bean中属性添加@Max,@NotNull等注解,即对响应属性进行校验,如果不满足,抛出MethodArguementNotValidException

@Validate内可添加group,表明需要校验的操作,@Max可添加groups,当groups包含group时,则进行校验。

Bean中也可自定义注解,通过实现ConstraintValidator接口自定义校验逻辑。如果校验失败,会抛出MethodArgumentNotValidException异常,

这些异常都被全局异常处理拦截,返回异常信息。

响应数据格式:

建立统一响应类JsonResp<T>,泛型T为业务响应内容,可为String,List,java bean等。定义属性result表明响应是否成功,响应码code,响应码信息msg。这里code及msg与全局异常处理的响应枚举类相对应。

定义ResponseBodyhandler实现ResponseBodyAdvice接口,当响应类型为json时,如果响应类型为JsonResp,直接响应给客户端;如果不是,则new JsonResp,将响应体set进去,响应给客户端。

在controller的方法返回类型可任意定义String,List,java bean,在ResponseBodyhandler转化为统一JsonResp形式。如果是流文件,则直接返回不会转化为JsonResp形式。这样可将响应包装成统一的JsonResp数据格式,便于前端处理。

全局异常处理

建立响应枚举类ResponseEnum,定义业务需要的响应码及响应码信息

建立自定义异常类BaseException,继承运行时异常RuntimeException,初始化时设置ResponseEnum。

建立异常捕捉类GlobalExceptionAspect,类中添加@RestCOntrollerAdvice注解,使用@Exceptional捕捉参数校验异常和自定义异常BaseException。

最外层捕捉Exception,捕捉未定义的异常

如果遇到业务报错,throw new BaseException(ResponseEnum.xxx),抛出自定义异常,该异常由GlobalExceptionAspect切面捕捉,统一响应至客户端

统一定义异常响应码,便于查看

避免在业务代码里进行异常的响应,简化代码

这些统一处理的本质是使用fliter或者aop拦截请求和响应参数进行通用逻辑处理,因此,可对请求进行敏感词过滤,参数加解密等处理,解耦业务逻辑。

以上就是spring MVC实践需要注意的地方的详细内容,更多关于spring MVC实践的资料请关注其它相关文章!

相关文章
|
2月前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
1213 90
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
|
4月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
411 0
|
2月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
2月前
|
人工智能 监控 Java
Spring AI Alibaba实践|后台定时Agent
基于Spring AI Alibaba框架,可构建自主运行的AI Agent,突破传统Chat模式限制,支持定时任务、事件响应与人工协同,实现数据采集、分析到决策的自动化闭环,提升企业智能化效率。
Spring AI Alibaba实践|后台定时Agent
|
3月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
642 1
|
4月前
|
Java 应用服务中间件 开发者
Spring Boot 技术详解与应用实践
本文档旨在全面介绍 Spring Boot 这一广泛应用于现代企业级应用开发的框架。内容将涵盖 Spring Boot 的核心概念、核心特性、项目自动生成与结构解析、基础功能实现(如 RESTful API、数据访问)、配置管理以及最终的构建与部署。通过本文档,读者将能够理解 Spring Boot 如何简化 Spring 应用的初始搭建和开发过程,并掌握其基本使用方法。
386 2
|
8月前
|
JSON 前端开发 Java
深入理解 Spring Boot 中日期时间格式化:@DateTimeFormat 与 @JsonFormat 完整实践
在 Spring Boot 开发中,日期时间格式化是前后端交互的常见痛点。本文详细解析了 **@DateTimeFormat** 和 **@JsonFormat** 两个注解的用法,分别用于将前端传入的字符串解析为 Java 时间对象,以及将时间对象序列化为指定格式返回给前端。通过完整示例代码,展示了从数据接收、业务处理到结果返回的全流程,并总结了解决时区问题和全局配置的最佳实践,助你高效处理日期时间需求。
1109 0
|
8月前
|
存储 Java 数据库
Spring Boot 注册登录系统:问题总结与优化实践
在Spring Boot开发中,注册登录模块常面临数据库设计、密码加密、权限配置及用户体验等问题。本文以便利店销售系统为例,详细解析四大类问题:数据库字段约束(如默认值缺失)、密码加密(明文存储风险)、Spring Security配置(路径权限不当)以及表单交互(数据丢失与提示不足)。通过优化数据库结构、引入BCrypt加密、完善安全配置和改进用户交互,提供了一套全面的解决方案,助力开发者构建更 robust 的系统。
300 0
|
9月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
858 0
|
5月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
394 0

热门文章

最新文章