当前位置:第一POS网 > 刷卡机知识点 >

刷卡机刷卡出现响应码错误

浏览:135 发布日期:2023-04-18 00:00:00 投稿人:佚名投稿

网上关于刷卡机刷卡出现响应码错误,Spring WebFlux响应式编程之异常处理的刷卡知识比较多,也有关于刷卡机刷卡出现响应码错误的问题,今天第一pos网(www.pos-diy.com)为大家整理刷卡常见知识,未来的我们终成一代卡神。

本文目录一览:

1、刷卡机刷卡出现响应码错误

刷卡机刷卡出现响应码错误

概述

Spring WebFlux提供了路由函数级别和全局级别的异常捕获和处理策略,我们通过例子演示下使用方法,并比较下各个策略的优势。

创建端点

示例端点将用户名作为查询参数,并返回“Hello name”作为结果。先创建一个路由器函数,将/hello请求路由到handleRequest处理回调。

@Beanpublic RouterFunction<ServerResponse> routeRequest(Handler handler) { return RouterFunctions.route(RequestPredicates.GET("/hello") .and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), handler::handleRequest);}

端点正常调用“/hello?name=Tonni”,但是如果name参数缺失,例如“/hello”,则会引发异常。接下来我们将看下如何在WebFlux中处理此异常。

public Mono<ServerResponse> handleRequest(ServerRequest request) { return //... sayHello(request) //...}private Mono<String> sayHello(ServerRequest request) { try { return Mono.just("Hello, " + request.queryParam("name").get()); } catch (Exception e) { return Mono.error(e); }}函数级别异常处理

Mono和Flux API中内置了两种方式,用于在函数级别处理错误。

onErrorReturn

发生错误时,我们可以使用onErrorReturn()返回静态默认值:

public Mono<ServerResponse> handleRequest(ServerRequest request) { return sayHello(request) .onErrorReturn("Hello Stranger") .flatMap(s -> ServerResponse.ok() .contentType(MediaType.TEXT_PLAIN) .bodyValue(s));}onErrorResume

一般有三种使用onErrorResume的方式进行错误处理。

计算动态回退值:

public Mono<ServerResponse> handleRequest(ServerRequest request) { return sayHello(request) .flatMap(s -> ServerResponse.ok() .contentType(MediaType.TEXT_PLAIN) .bodyValue(s)) .onErrorResume(e -> Mono.just("Error " + e.getMessage()) .flatMap(s -> ServerResponse.ok() .contentType(MediaType.TEXT_PLAIN) .bodyValue(s)));}

执行自定义回退方法:

public Mono<ServerResponse> handleRequest(ServerRequest request) { return sayHello(request) .flatMap(s -> ServerResponse.ok() .contentType(MediaType.TEXT_PLAIN) .bodyValue(s)) .onErrorResume(e -> sayHelloFallback() .flatMap(s -> ServerResponse.ok() .contentType(MediaType.TEXT_PLAIN) .bodyValue(s)));}

捕获、包装并重新抛出错误:

public Mono<ServerResponse> handleRequest(ServerRequest request) { return ServerResponse.ok() .body(sayHello(request) .onErrorResume(e -> Mono.error(new NameRequiredException( HttpStatus.BAD_REQUEST, "username is required", e))), String.class);}全局级别异常处理自定义全局错误响应属性,可以扩展DefaultErrorAttributes类并重写其getErrorAttributes方法:

public class GlobalErrorAttributes extends DefaultErrorAttributes{ @Override public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) { Map<String, Object> map = super.getErrorAttributes( request, options); map.put("status", HttpStatus.BAD_REQUEST); map.put("message", "username is required"); return map; }}实现全局错误处理,Spring提供了AbstractErrorWebExceptionHandler类,可以用于处理全局错误时进行自定义扩展:

@Component@Order(-2)public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler { // constructors @Override protected RouterFunction<ServerResponse> getRoutingFunction( ErrorAttributes errorAttributes) { return RouterFunctions.route( RequestPredicates.all(), this::renderErrorResponse); } private Mono<ServerResponse> renderErrorResponse( ServerRequest request) { Map<String, Object> errorPropertiesMap = getErrorAttributes(request, ErrorAttributeOptions.defaults()); return ServerResponse.status(HttpStatus.BAD_REQUEST) .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromValue(errorPropertiesMap)); }}

我们将全局错误处理的顺序级别设置为-2,是为了赋予比DefaultErrorWebExceptionHandler更高的优先级,后者是@Order(-1)。

结论

模块化封装一般需要包含全局异常处理进行兜底,应用服务自身可根据业务场景进行路由函数级别的异常处理。

以上就是关于刷卡机刷卡出现响应码错误,Spring WebFlux响应式编程之异常处理的知识,后面我们会继续为大家整理关于刷卡机刷卡出现响应码错误的知识,希望能够帮助到大家!

转载请带上网址:http://www.pos-diy.com/shuaka/61140.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 babsan@163.com 举报,一经查实,本站将立刻删除。
联系我们
订购联系:小莉
微信联系方式
地址:深圳市宝安区固戍联诚发产业园木星大厦

公司地址:深圳市宝安区固戍联诚发产业园木星大厦

举报投诉 免责申明 版权申明 广告服务 投稿须知 技术支持:第一POS网 Copyright@2008-2030 深圳市慧联实业有限公司 备案号:粤ICP备18141915号