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

青岛网站建设eoeeoe上海idc机房托管

青岛网站建设eoeeoe,上海idc机房托管,广告设计分为哪几类,深圳seo论坛一、RESTful (一)RESTful概述 RESTful是一种软件架构风格#xff0c;用于设计网络应用程序。REST是“Representational State Transfer”的缩写#xff0c;中文意思是“表现层状态转移”。它基于客户端-服务器模型和无状态操作#xff0c;以及使用HTTP请求来处理数据。RES…一、RESTful  (一)RESTful概述 RESTful是一种软件架构风格用于设计网络应用程序。REST是“Representational State Transfer”的缩写中文意思是“表现层状态转移”。它基于客户端-服务器模型和无状态操作以及使用HTTP请求来处理数据。RESTful架构风格强调利用HTTP协议的四个主要方法GET、POST、PUT、DELETE来实现资源的访问和操作。以下是RESTful架构的一些核心原则 客户端-服务器分离客户端和服务器之间的交互应该是简单的服务器端负责存储数据和业务逻辑客户端负责展示。 无状态每个请求从客户端到服务器必须包含所有必要的信息以便服务器能够理解请求并独立地处理它不依赖于之前的任何请求。 可缓存数据被标记为可缓存或不可缓存。如果数据被标记为可缓存那么客户端可以缓存数据以提高效率。 统一接口系统组件之间的交互通过统一的接口进行这简化了整体系统架构使得系统更容易理解、开发和使用。 分层系统客户端不能直接了解它所消费的服务之外的任何服务器信息也不应该知道它的数据是来自一个服务器还是多个服务器。 按需代码可选服务器可以按需向客户端发送代码比如JavaScript以便在客户端执行。         在RESTful架构中资源(Resources)是核心概念每个资源都有一个唯一的标识符通常是一个URI。客户端通过HTTP方法对这些资源进行操作 GET请求从服务器检索特定资源。GET请求应该是安全的不会产生副作用。 POST向服务器提交新的资源通常会导致创建新的资源。 PUT更新服务器上的现有资源。 DELETE从服务器上删除资源。         RESTful API设计简洁、直观易于理解和使用因此在现代网络应用中非常流行 代码示例  CrossOrigin // 允许跨域请求 RestController RequestMapping(/emp) public class EmpController {Autowiredprivate EmpService empService;/*** 查询员工*/GetMapping(/{empno})public R queryEmpById(PathVariable(empno) Integer empno) {Emp emp empService.queryById(empno);return R.ok(emp);}/*** 新增员工*/PostMappingpublic R addEmp(RequestBody Emp emp) {empService.save(emp);return R.ok();}/*** 修改员工*/PutMappingpublic R editEmp(RequestBody Emp emp) {empService.update(emp);return R.ok();}/*** 删除员工*/DeleteMapping(/{empno})public R deleteEmpById(PathVariable(empno) Integer empno) {empService.deleteById(empno);return R.ok();}/*** 查询所有员工*/GetMapping(/getAll)public R queryEmpList() {ListEmp empList empService.getList();return R.ok(empList);} } (二)PathVariable从URL中提取路径变量 PathVariable是Spring MVC中用于从URL中提取路径变量的注解。它允许将URL模板中的占位符映射到方法参数从而实现动态路由和数据传递。 使用场景 RESTful API在设计RESTful API时通常会使用PathVariable来获取资源的唯一标识符(如 ID)。动态内容根据 URL 中的变量来动态生成页面或响应内容。 二、拦截器 (一)HandlerInterceptor HandlerInterceptor是SpringMVC内置拦截器机制用于在请求处理的不同阶段插入自定义逻辑。它允许在请求到达控制器之前、控制器处理请求之后以及请求完成之后执行特定的操作。比如权限验证、日志记录、数据共享等...... 使用步骤 实现HandlerInterceptor接口的组件即可成为拦截器创建WebMvcConfigurer组件并配置拦截器的拦截路径执行顺序顺序preHandle→目标方法→倒序postHandle→渲染→倒序afterCompletion只有执行成功的preHandle会倒序执行afterCompletionpostHandle、afterCompletion从哪里跑出异常倒序链路从哪里结束postHandle失败不会影响afterCompletion执行 Component // 拦截器还需要配置(告诉SpringMVC这个拦截器主要拦截什么请求) public class MyHandlerInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(MyHandlerInterceptor...preHandle...);return false; // true表示放行false表示拦截}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(MyHandlerInterceptor...postHandle...);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(MyHandlerInterceptor...afterCompletion...);} } Configuration // 专门对SpringMVC底层进行配置 public class MySpringMVCConfig implements WebMvcConfigurer {AutowiredMyHandlerInterceptor myHandlerInterceptor;/*** 添加拦截器*/Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myHandlerInterceptor).addPathPatterns(/**); // 拦截所有请求} }CrossOrigin // 允许跨域请求 RestController RequestMapping(/emp) public class EmpController {Autowiredprivate EmpService empService;/*** 查询员工*/GetMapping(/{empno})public R queryEmpById(PathVariable(empno) Integer empno) {System.out.println(查询用户。目标方法执行......);Emp emp empService.queryById(empno);return R.ok(emp);} } (二)拦截器与过滤器的区别(面试题)  三、异常处理 1.编程式异常处理 编程式异常处理如果大量业务都需要加异常处理代码会很麻烦 GetMapping(/hello) public R hello(RequestParam(value i, defaultValue 0) Integer i) {try {int j 10 / i;return R.ok(j);} catch (Exception e) {return R.error(100, 除数不能为0, e.getMessage());} } 2.声明式异常处理 如果Controller本类出现异常会自动在本类中找到有没有ExceptionHandler标注的方法如果有执行这个方法它的返回值就是客户端收到的结果如果发生异常多个都能处理就精确的优先。异常处理的优先级本类 全局精确 模糊如果出现了异常本类和全局都不能处理SpringBoot底层对SpringMVC有兜底处理机制自适应处理(浏览器响应页面、移动端响应JSON)最佳实践编写全局异常处理器处理所有异常 RestController public class HelloController {GetMapping(/hello)public R hello(RequestParam(value i, defaultValue 0) Integer i) throws FileNotFoundException {int j 10 / i; // FileInputStream fileInputStream new FileInputStream(C:\\Users\\lxm\\Desktop\\test.txt);String str null;str.length();return R.ok(j);}ExceptionHandler(ArithmeticException.class)public R handlerArithmeticException(ArithmeticException e) {System.out.println(ArithmeticException异常处理);return R.error(100, 除数不能为0, e.getMessage());}ExceptionHandler(FileNotFoundException.class)public R FileNotFoundException(FileNotFoundException e) {System.out.println(FileNotFoundException异常处理);return R.error(300, 文件找不到, e.getMessage());}ExceptionHandler(Throwable.class)public R handlerException(Throwable e) {System.out.println(Throwable异常处理);return R.error(500, 其他异常, e.getMessage());} } // ResponseBody // ControllerAdvice // 告诉SpringMVC这个类是处理全局异常的 RestControllerAdvice // 全局异常处理器相当于ControllerAdvice ResponseBody public class GlobalExceptionHandler {ExceptionHandler(Exception.class)public R handleException(Throwable e) {System.out.println(全局异常处理);return R.error(500, e.getMessage());}ExceptionHandler(ArithmeticException.class)public R handlerArithmeticException(ArithmeticException e) {System.out.println(算数异常处理);return R.error(100, e.getMessage());} } 3.异常处理的最终方式 必须有业务异常类BusinessException必须有异常枚举类BusinessExceptionEnum列举项目中每个模块将会出现的所有异常情况编写业务代码的时候只需编写正确逻辑如果出现预期的问题需要以抛异常的方式中断逻辑并通知上层全局异常处理器GlobalExceptionHandler 处理所有异常返回给前端约定的JSON数据与错误码 异常枚举类  public enum BusinessExceptionEnum {ORDER_NOT_EXIST(10001, 订单不存在),ORDER_STATUS_ERROR(10002, 订单状态错误),ORDER_UPDATE_ERROR(10003, 订单更新失败),ORDER_DELETE_ERROR(10004, 订单删除失败),ORDER_CREATE_ERROR(10005, 订单创建失败),ORDER_QUERY_ERROR(10006, 订单查询失败),ORDER_PAY_ERROR(10007, 订单支付失败),ORDER_CANCEL_ERROR(10008, 订单取消失败);Getterprivate Integer code;Getterprivate String msg;BusinessExceptionEnum(Integer code, String msg) {this.code code;this.msg msg;} }全局业务异常类  Data public class BusinessException extends RuntimeException {private Integer code;private String msg;public BusinessException(Integer code, String msg) {super(msg);this.code code;this.msg msg;}public BusinessException(BusinessExceptionEnum businessExceptionEnum) {super(businessExceptionEnum.getMsg());this.code businessExceptionEnum.getCode();this.msg businessExceptionEnum.getMsg();} } 业务代码  Override public void update(Emp emp) {// 去数据库查询原来的值Integer empno emp.getEmpno();if (empno null) {throw new BusinessException(BusinessExceptionEnum.ORDER_NOT_EXIST);}Emp empById empDao.getEmpById(empno);if (StringUtils.hasText(empById.getEname())) {empById.setEname(emp.getEname());}empDao.updateEmp(emp); } 四、SpringMVC原理 五、数据类型转换 1.String转Date类型 Controller RequestMapping(/book) public class BookController {GetMapping(/jump)public String jump(){// int i 1/0;return book/add;}PostMapping(/doAdd)ResponseBodypublic BookModel doAdd(BookModel book){return book;/*** {* id: null,* name: 红楼梦,* ctime: 1735228800000* }*/}PostMapping(/doAdd2)ResponseBodypublic Date doAdd2(String name,DateTimeFormat(pattern yyyy-MM-dd) Date ctime){return ctime; // 1735142400000} } Data public class BookModel {private Integer id;private String name;DateTimeFormat(pattern yyyy-MM-dd)private Date ctime; } 2.String转LocalDateTime类型 自定义参数类型转换器 public class StringToDate implements ConverterString, Date {Overridepublic Date convert(String s) {//传入的参数,等待被转换的2024-12-27 字符串System.out.println(s);SimpleDateFormat simpleDateFormat new SimpleDateFormat(yyyy-MM-dd);Date date null;try {date simpleDateFormat.parse(s);} catch (ParseException e) {throw new RuntimeException(e);}return date;} }public class StringToDateTime implements ConverterString, LocalDateTime {Overridepublic LocalDateTime convert(String s) {return LocalDateTime.parse(s, DateTimeFormatter.ISO_LOCAL_DATE_TIME);} } Data public class BookModel {private Integer id;private String name; // DateTimeFormat(pattern yyyy-MM-dd)private Date ctime; // JsonFormat(pattern yyyy-MM-dd HH:mm:ss)private LocalDateTime utime; } 3.接收JSON字符串 dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.11.2/version /dependency dependencygroupIdcom.fasterxml.jackson.datatype/groupIdartifactIdjackson-datatype-jsr310/artifactIdversion2.11.2/version /dependency /*** 接收JSON转换日期时间*/ PostMapping(/doAdd3) ResponseBody public BookModel doAdd3(RequestBody BookModel book){return book; } Data public class BookModel {private Integer id;private String name;// DateTimeFormat(pattern yyyy-MM-dd)private Date ctime;JsonFormat(pattern yyyy-MM-dd HH:mm:ss)private LocalDateTime utime; } 注意 JSON时间,可以写2024-01-27 09:09:09 不能写 2024-1-27 9:9:9
http://www.w-s-a.com/news/112536/

相关文章:

  • iis7 网站404错误信息12306网站很难做吗
  • 网站建设600元包公司设计图片大全
  • 网站建设费用怎么做分录做校园网站代码
  • 网站改版做重定向福州网站建设思企
  • 网站建设全流程企业形象网站开发业务范畴
  • wordpress无法查看站点西安优秀高端网站建设服务商
  • 固始网站制作熟悉免费的网络营销方式
  • 做网站到a5卖站赚钱搜索引擎优化代理
  • 沈阳网站建设包括win10优化
  • 做百度手机网站点击软网站seo优化徐州百度网络
  • 徐州专业网站制作标志设计作业
  • 自己可以做网站空间吗海天建设集团有限公司网站
  • 教学督导网站建设报告aspcms网站图片不显示
  • 网站开发公司成本是什么门户网站宣传方案
  • 上海 企业网站建设网站怎么开通微信支付
  • 饮料网站建设wordpress主题猫
  • 网站建设需要编码不有没有专门的网站做品牌授权的
  • 做爰在线网站免费空间列表
  • 网站外链建设工作总结郑州网站建设扌汉狮网络
  • 建设企业网站的需要多长时间网站使用说明书模板
  • 建网站首页图片哪里找263企业邮箱网页版登录
  • 盐城网站建设电话高端定制网站
  • 成都网站seo技术施工企业样板先行制度
  • 高端网站建设电话河北建筑工程信息网站
  • 亲 怎么给一个网站做备份财务系统有哪些软件
  • wordpress重新手机优化专家下载
  • 怎样把网站做成软件设计工作室怎么接单
  • html网站设计实例代码重庆多个区划定风险区
  • 推广方案设计同一个网站可以同时做竞价和优化
  • 论坛网站开发 go电商扶贫网站建设