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

网站与平台的开发区别婚纱影楼网站建设

网站与平台的开发区别,婚纱影楼网站建设,网站空间ip地址,海南手机网站建设公司需求 接口的返回响应#xff0c;封装成统一的数据格式#xff0c;再返回给前端。 依赖 对于SpringBoot项目#xff0c;接口层基于 SpringWeb#xff0c;也就是 SpringMVC。 dependencygroupIdorg.springframework.boot/groupIdartifactId封装成统一的数据格式再返回给前端。 依赖 对于SpringBoot项目接口层基于 SpringWeb也就是 SpringMVC。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency说明 为了使接口的返回结果数据更加规范化便于接口测试和前端处理需要以统一的格式来返回数据 为了不在每一个接口里面都写一段返回数据封装的代码将数据封装的逻辑提取出来使用切面AOP原理统一对数据进行封装。 如上涉及到两个问题 定义响应实体的数据结构响应数据统一封装 下面我们分别来介绍这两个问题如何处理。 响应实体的数据结构 数据结构 返回响应统一封装实体数据结构如下 代码 package com.example.core.model;import io.swagger.v3.oas.annotations.media.Schema; import lombok.*;/*** 返回响应统一封装实体** param T 数据实体泛型*/ Getter ToString EqualsAndHashCode AllArgsConstructor(access AccessLevel.PRIVATE) Schema(name 返回响应, description 返回响应统一封装实体) public class ResultT {Schema(description 用户提示, example 操作成功)private String userMessage;/*** 错误码br* 调用成功时为 null。br* 示例A0211*/Schema(description 错误码)private String errorCode;/*** 错误信息br* 调用成功时为 null。br* 示例用户输入密码错误次数超限*/Schema(description 错误信息)private String errorMessage;/*** 数据实体泛型br* 当接口没有返回数据时为 null。*/Schema(description 数据实体泛型)private T data;public static T ResultT success(T data) {return new Result(操作成功, null, null, data);}public static T ResultT fail(String userMessage, String errorCode, String errorMessage) {return new Result(userMessage, errorCode, errorMessage, null);}} 特别说明不需要表示成功或失败的字段 在本处的数据结构中没有一个专门用来表示接口请求成功或失败的字段比如success 或 code。 推荐的做法是使用 HTTP状态码表示请求是否成功最简单的模型是当状态码为200时表示成功当状态码为 3xx4xx5xx 时代表请求失败。 HTTP的状态码已经清晰的描述了请求的响应状态成功/失败。 复杂模型中http状态码还包含请求成功的类型和失败的原因。 复杂模型中成功的类型 HTTP状态码含义200 OK请求成功201 Created新增成功202 Accepted成功异步任务已经接收 成功的类型 HTTP状态码含义400 Bad Request失败客户端请求错误比如参数传递错误401 Unauthorized失败未登录403 Forbidden失败未授权 响应统一封装 响应统一封装基于 ResponseBodyAdvice 。 基于面相切面编程AOP原理每个接口方法调用成功后在返回给客户端前会进行指定的处理这里是响应数据统一封装成指定的格式其实也可以做其他的事情比如 加密。 代码 package com.example.core.advice;import com.example.core.model.Result; import com.example.core.util.JsonUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.core.MethodParameter; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/*** 响应统一封装* p* 将响应数据封装成统一的数据格式。* p* 通过本处理器将接口方法返回的数据统一封装到 Result 的 data 字段中如果接口方法返回为 void则 data 字段的值为 null。*/ Slf4j RestControllerAdvice(basePackages com.example.web) public class GlobalResponseHandler implements ResponseBodyAdviceObject {/*** 此组件是否支持给定的控制器方法返回类型和选定的 {code HttpMessageConverter} 类型。** return 如果应该调用 {link #beforeBodyWrite} 则为 {code true}否则为false。*/Overridepublic boolean supports(MethodParameter returnType, Class? extends HttpMessageConverter? converterType) {// 返回类型不为Result才需要封装return returnType.getParameterType() ! Result.class;}/*** 统一封装返回响应数据*/Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,Class? extends HttpMessageConverter? selectedConverterType, ServerHttpRequest request,ServerHttpResponse response) {// 数据封装为Result将接口方法返回的数据封装到 Result.data 字段中。ResultObject result Result.success(body);// 返回类型不是 String直接返回if (returnType.getParameterType() ! String.class) {return result;}// 返回类型是 String不能直接返回需要进行额外处理// 1. 将 Content-Type 设为 application/json 返回类型是String时默认 Content-Type text/plainHttpHeaders headers response.getHeaders();headers.setContentType(MediaType.APPLICATION_JSON);// 2. 将 Result 转为 Json字符串 再返回// 否则会报错 java.lang.ClassCastException: com.example.core.model.Result cannot be cast to java.lang.Stringreturn JsonUtil.toJson(result);}} 补充说明 需要注意两点 返回类型不为 Result才需要封装返回类型是 String需要进行额外处理不能直接返回否则会报错。 如果返回类型是 Result 也封装就会使得接口返回中多一层 Result 嵌套 SpringWeb的接口如果返回值为String类型默认 Content-Type text/plain需要手动设置为 application/json 返回类型为String时接口必须返回String否则会报错 ClassCastException所以需要将封装好的Result 转换成JSON字符串后返回 测试 代码 package com.example.web.exception.controller;import com.example.core.log.annotation.ApiLog; import com.example.core.model.PageQuery; import com.example.web.exception.query.UserQuery; import com.example.web.model.vo.UserVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.validation.Valid; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors;Slf4j RestController RequestMapping(exception) Tag(name 异常统一处理) public class ExceptionController {ApiLogGetMapping(path users)Operation(summary 查询用户列表, description 测试BindException。参数校验异常Get请求Query参数以对象的形式接收。)public ListUserVO listUsers(Valid UserQuery userQuery, PageQuery pageQuery,HttpServletRequest request, HttpServletResponse response, HttpSession session) {log.info(查询用户列表。userQuery{}pageQuery{}, userQuery, pageQuery);String queryName userQuery.getName();String queryPhone userQuery.getMobilePhone();return listMockUsers().stream().filter(user - {boolean isName true;boolean isPhone true;if (StringUtils.hasText(queryName)) {isName user.getName().contains(queryName);}if (StringUtils.hasText(queryPhone)) {isPhone user.getMobilePhone().contains(queryPhone);}return isName isPhone;}).collect(Collectors.toList());}private ListUserVO listMockUsers() {ListUserVO list new ArrayList();UserVO vo new UserVO();vo.setId(1234567890123456789);vo.setName(张三);vo.setMobilePhone(18612345678);vo.setEmail(zhangsanqq.com);vo.setBeginTime(new Date());vo.setEndTime(new Date());vo.setBeginDate(new Date());vo.setEndDate(new Date());list.add(vo);UserVO vo2 new UserVO();vo2.setId(1234567890123456781);vo2.setName(李四);vo2.setMobilePhone(13412345678);vo2.setEmail(lisiexample.com);vo2.setBeginTime(new Date());vo2.setEndTime(new Date());vo2.setBeginDate(new Date());vo2.setEndDate(new Date());list.add(vo2);return list;}} 效果
http://www.w-s-a.com/news/720372/

相关文章:

  • 网站如何做移动规则适配北京住房与城乡建设部网站
  • 课堂阵地建设网站wordpress运行机制
  • 网站建设的需求方案企业网站建设费用明细
  • 创口贴网站模板京创影视app
  • 团购网站建设目的网站有很多304状态码
  • 运用阿里云怎么做网站外资企业可以在中国境内做网站吗
  • 云南住房和城乡建设局网站西安做官网的公司
  • 企业网站图片上传网站建设和应用的情况
  • 网站不显示内容吗聊城网架公司
  • 南昌网站建设企业网站托管外包怎么做
  • 做非洲外贸的网站网站可以用PS设计吗
  • PHP搭建IDC网站青岛福瀛建设集团网站
  • 安徽网站优化多少钱软件界面设计的基本原则
  • 网站建设动态页面修改删除dnf卖飞机的网站怎么做的
  • 万网是做什么的seo综合
  • 网站关键词分隔符php网站开发平台下载
  • 郑州那家做网站便宜商业计划书免费word版
  • 秦时明月的个人网站怎么做网站开发公司需要招聘哪些人
  • 广告网站建设制作设计服务商安卓app软件定制
  • 公司网站设计与实现中国职业培训在线官方网站
  • 网站服务器空间租用郑州官网网站推广优化
  • 郑州网站建设外包业务wordpress站酷首页
  • 机关门户网站 建设 方案个人怎么申请注册商标
  • 梧州网站建设有哪些九江网站建设优化
  • APP网站建设开发企业发展英文seo招聘
  • 临海市住房和城乡建设规划局网站高校图书馆网站的建设方案
  • 建立门户网站张店易宝网站建设
  • wordpress中英文站点厦门seo顾问屈兴东
  • 邯郸网站建设项目重庆网站备案系统
  • 网站导航容易做黄冈网站建设报价