刷卡机刷卡出现响应码错误
网上关于刷卡机刷卡出现响应码错误,Spring WebFlux响应式编程之异常处理的刷卡知识比较多,也有关于刷卡机刷卡出现响应码错误的问题,今天第一pos网(www.pos-diy.com)为大家整理刷卡常见知识,未来的我们终成一代卡神。
本文目录一览:
刷卡机刷卡出现响应码错误
概述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
- 上一篇:招商银行有私人刷卡机吗
- 下一篇:刷卡机二维码收款怎么开通