Spring MVC 响应机制综合实践:页面、数据、JSON 与响应配置

Spring MVC 响应机制的核心方式

返回视图(页面渲染)
通过返回视图名称(如return "home"),配合视图解析器(InternalResourceViewResolver)定位到/WEB-INF/views/home.jsp等具体页面。需在配置中定义视图前缀和后缀:

@Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; }

返回纯文本或HTML
使用@ResponseBody注解直接返回字符串内容,适用于简单文本或HTML片段:

@GetMapping("/text") @ResponseBody public String rawText() { return "<h1>Hello World</h1>"; }

JSON 响应处理

自动序列化对象为JSON
结合@RestController@ResponseBody,Spring 默认使用 Jackson 将对象序列化为 JSON:

@GetMapping("/user") public User getUser() { return new User("Alice", 25); }

需添加 Jackson 依赖(如spring-boot-starter-json)。

定制JSON字段
通过@JsonIgnore忽略字段,@JsonProperty重命名字段:

public class User { @JsonProperty("username") private String name; @JsonIgnore private String password; }

响应头与状态码控制

手动设置状态码
使用ResponseEntity自定义状态码和响应头:

@GetMapping("/custom") public ResponseEntity<String> customResponse() { HttpHeaders headers = new HttpHeaders(); headers.add("X-Custom-Header", "value"); return new ResponseEntity<>("Custom Body", headers, HttpStatus.CREATED); }

重定向与转发
通过redirect:前缀实现重定向,或返回ModelAndView进行转发:

@GetMapping("/redirect") public String redirect() { return "redirect:/new-url"; }

全局响应配置

统一响应格式
使用@ControllerAdvice定义全局响应封装:

@ControllerAdvice public class GlobalResponseHandler implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { return new ResponseWrapper<>(200, "success", body); } }

CORS 跨域配置
在配置类中全局启用 CORS:

@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOrigins("*") .allowedMethods("GET", "POST"); } }

异常处理与错误响应

统一异常处理
通过@ExceptionHandler捕获异常并返回结构化错误信息:

@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleException(Exception ex) { ErrorResponse error = new ErrorResponse(500, ex.getMessage()); return ResponseEntity.status(500).body(error); } }

自定义错误页面
配置ErrorViewResolver或定义/error映射:

@Controller public class ErrorController implements ErrorController { @RequestMapping("/error") public String handleError(HttpServletRequest request) { Integer status = (Integer) request.getAttribute("javax.servlet.error.status_code"); return status == 404 ? "error-404" : "error-general"; } }

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

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

相关文章

java Date转换为string

在Java中将Date转换为String有多种方法&#xff0c;以下是常用的几种方式&#xff1a; 1. 使用 SimpleDateFormat&#xff08;传统方式&#xff0c;Java 8之前&#xff09; import java.text.SimpleDateFormat; import java.util.Date;// 创建Date对象 Date date new Date()…

看清不要什么:60天松绑第二步——用“反愿景”照见你的隐形牢笼与停滞沼泽

一、从“想要”到“不想要”的认知升级上一期&#xff0c;我们一起启动了“60天松绑”的第一步。但一个更深层的问题随之浮现&#xff1a;为什么我们总是对“想要的生活”心潮澎湃&#xff0c;却在行动时寸步难行&#xff1f;一个隐秘的答案或许是&#xff1a;我们弄错了顺序。…

如何甄别一家靠谱的背调公司?

如何选择一家可靠的背调服务商&#xff0c;是企业招聘中关键却常被忽视的一环。在信息繁杂的市场中&#xff0c;甄别需要回归核心&#xff0c;关注以下几个务实维度。首先&#xff0c;核查其数据源的合法性与广度。专业的背调公司应具备多元、合规的信息获取渠道&#xff0c;而…

SimpleDateFormat 为什么线程不安全

SimpleDateFormat是线程不安全的&#xff0c;主要原因如下&#xff1a; 1. 内部状态可变性 // SimpleDateFormat 内部维护了可变状态 private StringBuffer format(Date date, StringBuffer toAppendTo, FieldDelegate delegate) {// 会修改内部的 Calendar 对象calendar.set…

【Rust开发】Rust基础语法详细解析,助力你快速通关Rust

Rust基础语法解析变量与可变性Rust中变量默认不可变&#xff0c;使用let声明。可变变量需添加mut关键字&#xff1a;let x 5; // 不可变 let mut y 10; // 可变 y 15; // 允许修改常量使用const声明&#xff0c;必须标注类型&#xff1a;const MAX_POINTS: …

性能优化:类型系统的最佳实践

性能优化&#xff1a;类型系统的最佳实践 欢迎继续本专栏的第三十七篇文章。在前几期中&#xff0c;我们已逐步深化了对 TypeScript 测试实践的理解&#xff0c;包括如何配置 Jest 以支持类型安全的断言和 mock&#xff0c;以及在异步代码中的错误处理策略。这些内容帮助我们构…

设计模式在 TypeScript 中的实现

设计模式在 TypeScript 中的实现 欢迎继续本专栏的第三十八篇文章。在前几期中&#xff0c;我们已逐步深化了对 TypeScript 性能优化的理解&#xff0c;包括避免 any 类型的策略、类型推断的优化技巧&#xff0c;以及在大型项目中的性能考虑。这些实践帮助我们构建了更高效和可…

2026年1月线切割机床厂家推荐排行榜,中走丝/快走丝/电火花线切割机床,穿孔机,精密高效加工设备源头厂商精选

2026年1月线切割机床厂家推荐排行榜:中走丝/快走丝/电火花线切割机床与穿孔机精密高效加工设备源头厂商精选 随着制造业向高精度、高效率、智能化方向持续演进,特种加工技术在现代工业体系中的地位日益凸显。线切割机…

C盘爆红怎么办!几招彻底清理电脑C盘空间

真实用户求救&#xff1a;C盘红了&#xff0c;我慌了&#xff01; “昨天开黑突然卡死&#xff0c;一看C盘只剩200MB&#xff01;不得不考虑清理电脑c盘空间&#xff01;c盘爆红了可以删除哪些文件&#xff1f;怕删错系统崩了...求大神指点怎么清除电脑c盘的空间才安全&#x…

研发需求排期实战指南:工具选型、流程搭建与效能提升

在研发项目节奏日益加快、需求来源日趋多元的今天&#xff0c;混乱的需求排期往往会导致研发资源浪费、项目延期交付、团队精力内耗等一系列问题。然而&#xff0c;需求的繁杂并非最棘手的——棘手的是无法在业务价值、研发成本与时间周期之间找到平衡。研发需求排期工具的核心…

聊聊AI智能客服

一、关于AI智能客服新闻事件分析报告解读 现象概述:AI智能客服在企业服务中广泛应用,具有效率高、成本低等优势,中国智能客服市场规模不断增长,前景良好。但它存在不能解决个性化问题、交流缺乏情感、转人工流程复杂等问题,易引发用户抵触。同时,有人在探索AI客服的配置及…

破解协作低效难题:中小企业流程数字化工具及核心策略

在数字化转型浪潮下&#xff0c;中小企业面临着流程繁琐、协作低效、数据孤岛、成本高企等诸多痛点。相较于大型企业&#xff0c;中小企业资源有限、人员精简、业务灵活&#xff0c;传统的纸质流程或零散的办公软件早已无法满足高效运营的需求。然而&#xff0c;转型的难点并非…

测试用例执行进度实时同步工具指南:从流程打通到效率提效的全链路落地

在软件研发全生命周期中&#xff0c;测试环节是保障产品质量的核心防线&#xff0c;而测试用例执行的效率与透明度&#xff0c;直接决定了研发迭代的节奏与产品交付的质量。当测试团队跨岗位协作、多版本并行测试时&#xff0c;信息滞后、进度不透明、同步不及时等问题&#xf…

【无人机追踪】基于资源福利任务分配算法的无人机集群任务分配算法,完成目标攻击任务的基础上,无人机的资源利用率最大化 + 资源损耗的公平性最优附Matlab代码2

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

2026年铝板厂家推荐排行榜:幕墙铝板、氟碳铝板、木纹铝板、蜂窝铝板、异型铝板等全品类实力厂家深度解析与选购指南

2026年铝板厂家推荐排行榜:幕墙铝板、氟碳铝板、木纹铝板、蜂窝铝板、异型铝板等全品类实力厂家深度解析与选购指南 随着建筑美学与功能需求的不断演进,铝板材料以其轻质高强、耐候性强、造型丰富、绿色环保等综合优…

RAG 不是万能解,这些场景你一开始就不该用

RAG并非万能,默认滥用反致系统复杂、效果难测。它仅解决“信息获取”,不提升模型能力。最适合四类场景:动态知识更新、需答案溯源、长尾问题密集、需求尚不明确。慎用于强推理、隐性经验、高实时性及高确定性要求场…

零基础想转行网络安全?这3个方向门槛低、就业快

【收藏】网络安全转行避坑指南&#xff1a;零基础无需报班&#xff0c;3个方向半年拿offer&#xff0c;薪资比IT高37% 网络安全人才缺口大&#xff0c;零基础转行无需报班。可考虑三个方向&#xff1a;运维工程师(网络防护&#xff0c;3个月就业&#xff0c;起薪1.2-1.5万)&am…

运维人别内耗!转行网安,薪资翻倍+职业逆袭指南

【必收藏】运维转网络安全&#xff1a;3步实现薪资翻倍&#xff0c;告别35岁危机&#xff01; 运维人员转行网络安全具有天然优势&#xff0c;因为运维经验&#xff08;系统管理、网络配置、日志分析等&#xff09;正是网安工作的基础。运维人员对安全风险的亲身经历也让他们更…

2026网络安全这趟车_你还敢上吗?

网络安全真相大揭秘&#xff1a;2026年入坑指南&#xff0c;收藏级内容&#xff0c;小白程序员必读 网络安全行业现状严峻&#xff1a;求职竞争激烈&#xff0c;企业需要的是真正理解攻防逻辑的人才而非工具使用者&#xff1b;安全部门常被视为成本中心&#xff0c;在公司预算…

2026年,还能继续入网络安全行业吗?那些行业不敢说的秘密

收藏&#xff01;2026年网安行业生存指南&#xff1a;不推荐入行&#xff1f;先了解真相再决定 文章揭示2026年网络安全行业面临就业难、收入不稳定、企业重视度低等挑战。企业需要能发现漏洞、写工具、理解攻防逻辑的人才&#xff0c;而非只会使用工具的"工具人"。…