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

Java响应实体【R】

R响应实体

  • 响应实体R(Response Entity)具体作用说明?
    • 1、用与数据传输
    • 2、用于状态反馈
    • 3、指令与控制
  • 普通响应实体
  • 优化后的R:高级响应实体类

响应实体R(Response Entity)具体作用说明?

1、用与数据传输

  • 传输请求结果 :当客户端向服务器发送请求后,服务器通过响应实体将请求的处理结果返回给客户端。例如,在一个在线购物系统中,客户端请求查看某个商品的详情,服务器将商品的名称、价格、库存等详细信息封装在响应实体中发送给客户端。
  • 携带资源内容 :对于资源获取类的请求,响应实体可以携带具体的资源内容,如网页的 HTML 代码、图片数据、文件内容等。比如用户请求访问一个网页时,服务器将网页的 HTML 文件作为响应实体返回,客户端浏览器根据该响应实体内容进行页面渲染。

2、用于状态反馈

  • 指示请求处理状态 :响应实体中的状态码可以明确指示请求的处理情况,如成功(2xx)、客户端错误(4xx)、服务器错误(5xx)等。例如,状态码 200 表示请求已成功处理,404 表示请求的资源未找到,500 表示服务器内部错误等。
  • 提供详细状态信息 :除了状态码,响应实体还可以包含更详细的状态描述信息,帮助客户端更好地理解请求的处理结果。比如在返回 401 未授权状态码时,响应实体中可以包含提示信息,如 “未提供有效的身份验证凭据” 等。

3、指令与控制

  • 指导客户端操作 :响应实体可以包含一些指令,指导客户端进行后续的操作。例如,在文件下载请求的响应中,服务器可以指示客户端以特定的方式处理下载的文件,如自动打开、保存到指定目录等。
  • 控制客户端行为 :通过响应实体,服务器可以对客户端的行为进行一定程度的控制,如限制客户端的访问频率、控制客户端对某些资源的访问权限等。

普通响应实体

package com.pojo.vo;import java.io.Serializable;/*** 响应实体类** @author mini* @date 2025.05.06*/
public class R implements Serializable {private static final long serialVersionUID = 1L;private Integer code;private String message;private Object data;public R() {}public R(Integer code, String message, Object data) {this.code = code;this.message = message;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static R ok() {return new R(200, "成功", null);}public static R ok(Object data) {return new R(200, "成功", data);}public static R ok(String message, Object data) {return new R(200, message, data);}public static R error() {return new R(500, "失败", null);}public static R error(String message) {return new R(500, message, null);}public static R error(Integer code, String message) {return new R(code, message, null);}
}

优化后的R:高级响应实体类

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import org.springframework.context.MessageSource;/*** 高级响应实体类** @author mini* @date 2025.05.06*/
public class R implements Serializable {private static final long serialVersionUID = 1L;/*** 常用状态码*/public static final int CODE_SUCCESS = 200;public static final int CODE_BAD_REQUEST = 400;public static final int CODE_UNAUTHORIZED = 401;public static final int CODE_FORBIDDEN = 403;public static final int CODE_NOT_FOUND = 404;public static final int CODE_INTERNAL_ERROR = 500;private Integer code;private String message;private Object data;private Map<String, String> headers = new HashMap<>();public R() {}public R(Integer code, String message, Object data) {this.code = code;this.message = message;this.data = data;}// Getters and Setterspublic Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public Map<String, String> getHeaders() {return headers;}public void setHeaders(Map<String, String> headers) {this.headers = headers;}// 静态方法创建响应实体public static R ok() {return new R(CODE_SUCCESS, "成功", null);}public static R ok(Object data) {return new R(CODE_SUCCESS, "成功", data);}public static R ok(String messageKey, Object... args) {String message = MessageSource.getMessage(messageKey, args, Locale.getDefault());return new R(CODE_SUCCESS, message, null);}public static R error() {return new R(CODE_INTERNAL_ERROR, "失败", null);}public static R error(String message) {return new R(CODE_INTERNAL_ERROR, message, null);}public static R error(Integer code, String message) {return new R(code, message, null);}public static R resourceNotFound() {return new R(CODE_NOT_FOUND, "资源未找到", null);}public static R forbidden() {return new R(CODE_FORBIDDEN, "禁止访问", null);}public static R badRequest() {return new R(CODE_BAD_REQUEST, "请求错误", null);}public static R unauthorized() {return new R(CODE_UNAUTHORIZED, "未授权", null);}public static R validationError(List<String> errors) {return new R(CODE_BAD_REQUEST, "参数验证失败", errors);}// 链式调用public R code(Integer code) {this.code = code;return this;}public R message(String message) {this.message = message;return this;}public R data(Object data) {this.data = data;return this;}public R header(String name, String value) {headers.put(name, value);return this;}public R put(String key, Object value) {if (this.data == null) {this.data = new HashMap<>();}((Map<String, Object>) this.data).put(key, value);return this;}// 支持分页数据public static R okWithPage(Object content, Long totalElements, Integer totalPages, Integer currentPage) {return new R(CODE_SUCCESS, "成功", content).put("totalElements", totalElements).put("totalPages", totalPages).put("currentPage", currentPage);}// 支持国际化public static R okWithI18n(String messageKey, Object... args) {String message = MessageSource.getMessage(messageKey, args, Locale.getDefault());return new R(CODE_SUCCESS, message, null);}// 支持缓存控制public static R okWithCache(Object data, long cacheTime) {return new R(CODE_SUCCESS, "成功", data).header("Cache-Control", "max-age=" + cacheTime);}// 支持验证错误public static R validationError(List<String> errors) {return new R(CODE_BAD_REQUEST, "参数验证失败", errors);}// 静态内部类,用于模拟 MessageSourceprivate static class MessageSource {public static String getMessage(String messageKey, Object[] args, Locale locale) {ResourceBundle bundle = ResourceBundle.getBundle("messages", locale);return bundle.getString(messageKey);}}
}
http://www.xdnf.cn/news/334585.html

相关文章:

  • JavaScript 性能优化全攻略:从基础到实战
  • PDF生成模块开发经验分享
  • element MessageBox 实现底部三个按钮或者更多按钮—开箱即用
  • Spring Cloud:概述,服务注册和服务发现,多机部署和负载均衡
  • 二本计算机,毕业=失业?
  • 【Rust】结构体
  • 【算法学习】递归、搜索与回溯算法(二)
  • 计算机网络:深入分析三层交换机硬件转发表生成过程
  • 为了摸鱼和吃瓜,我开发了一个网站
  • 酒店客房拖鞋材质款式多样,对顾客入住感受影响大
  • 面试实践AND面经热点题目总结
  • 紫禁城多语言海外投资理财返利源码带前端uniapp纯工程文件
  • C++ Primer (第五版)-第十四章重载运算与类型转换
  • 雷军「去执行化」与小米汽车更名:一场关乎安全与战略的双向奔赴|创客匠人热点评述
  • 软件工程之需求分析涉及的图与工具
  • V 型球阀:多材质多驱动,精准适配复杂严苛工况-耀圣
  • 开源照片管理系统PhotoPrism的容器化部署与远程管理配置
  • 【electron+vue】常见功能之——调用打开/关闭系统软键盘,解决打包后键盘无法关闭问题
  • Inno Setup专业打包指南:从基础到高级应用
  • 没有Mac,我是怎么上传IPA到App Store的?
  • maven如何搭建自己的私服(LINUX版)?
  • 【Linux修炼手册】Linux开发工具的使用(一):yum与vim
  • 网易游戏 Flink 云原生实践
  • OrangePi Zero 3学习笔记(Android篇)3 - 串口
  • Qt实现车载多媒体项目,包含天气、音乐、视频、地图、五子棋功能模块,免费下载源文件!
  • Linux/AndroidOS中进程间的通信线程间的同步 - 消息队列
  • nputop:交互式 Ascend NPU 进程查看器(nvitop昇腾版)
  • 视觉图像处理及多模态融合初探
  • MyBatis(进阶)(xml标签)
  • 代码随想录算法训练营第三十七天-2|动态规划part2