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

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.jsqmd.com/news/304804/

相关文章:

  • java Date转换为string
  • 看清不要什么:60天松绑第二步——用“反愿景”照见你的隐形牢笼与停滞沼泽
  • 如何甄别一家靠谱的背调公司?
  • SimpleDateFormat 为什么线程不安全
  • 【Rust开发】Rust基础语法详细解析,助力你快速通关Rust
  • 性能优化:类型系统的最佳实践
  • 设计模式在 TypeScript 中的实现
  • 2026年1月线切割机床厂家推荐排行榜,中走丝/快走丝/电火花线切割机床,穿孔机,精密高效加工设备源头厂商精选
  • C盘爆红怎么办!几招彻底清理电脑C盘空间
  • 研发需求排期实战指南:工具选型、流程搭建与效能提升
  • 聊聊AI智能客服
  • 破解协作低效难题:中小企业流程数字化工具及核心策略
  • 测试用例执行进度实时同步工具指南:从流程打通到效率提效的全链路落地
  • 【无人机追踪】基于资源福利任务分配算法的无人机集群任务分配算法,完成目标攻击任务的基础上,无人机的资源利用率最大化 + 资源损耗的公平性最优附Matlab代码2
  • 2026年铝板厂家推荐排行榜:幕墙铝板、氟碳铝板、木纹铝板、蜂窝铝板、异型铝板等全品类实力厂家深度解析与选购指南
  • RAG 不是万能解,这些场景你一开始就不该用
  • 零基础想转行网络安全?这3个方向门槛低、就业快
  • 运维人别内耗!转行网安,薪资翻倍+职业逆袭指南
  • 2026网络安全这趟车_你还敢上吗?
  • 2026年,还能继续入网络安全行业吗?那些行业不敢说的秘密
  • 普通本科转行网络安全5年,现在月薪2W+,劝你想清楚!
  • IP6163至为芯支持MPPT功能的太阳能电池板充电DC-DC芯片
  • 轨道小车无线控制系统设计与实现
  • 【图像加密】基于DCT变换的图像加密与解密附matlab代码
  • 2026年想给Facebook广告账户充值,到底该找谁?这里有一份详细的避坑指南
  • 144. 二叉树的前序遍历-day11
  • 2026年 电机厂家推荐排行榜:直驱电机/线性电机/无框电机/力矩电机/高频电机,核心技术与高效能解决方案深度解析
  • Comsol电弧冲击击穿模型:多相流模拟的奇妙之旅
  • 交流调压那些事儿:单相、三相及带中性线三相交流调压
  • 探索锂电池生产设备的自动化控制:从硬件到软件实现