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

北京市建设工程发包承包交易中心网站顺飞网站建设怎么样

北京市建设工程发包承包交易中心网站,顺飞网站建设怎么样,广州wap网站制作,wordpress中文安装竟然是英文的起因 关于使用AOP去实现统一返回接口在之前的博客中我们已经实现了#xff0c;但我突然突发奇想#xff0c;SpringBoot中异常类的统一返回好像是通过RestControllerAdvice 这个注解去完成的#xff0c;那我是否也可以通过这个注解去实现统一返回接口。 正文 这个方法主要…起因 关于使用AOP去实现统一返回接口在之前的博客中我们已经实现了但我突然突发奇想SpringBoot中异常类的统一返回好像是通过RestControllerAdvice 这个注解去完成的那我是否也可以通过这个注解去实现统一返回接口。 正文 这个方法主要是通过ControllerAdvice ResponseBodyAdvice实现统一返回结果。其实本质来说和aop实现是相通的明白一个另一个就非常好理解了。 Result 的代码我就不在这边重复贴了读者可以去我直接用AOP实现的博客中拿 自定义注解 import com.study.project.common.BaseResponse; import com.study.project.common.ResultCode;import java.lang.annotation.*;import static com.study.project.common.ResultCode.SUCCESS;/*** date 2023/2/18*/ Documented Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface FunctionResult {String value() default ;//默认code为成功ResultCode code() default SUCCESS; } 自定义一个响应拦截 import com.study.project.annotation.FunctionResult; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; 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;import java.lang.annotation.Annotation; import java.lang.reflect.Method;/*** author Chengming.Zhang* date 2023/2/18* ResponseBodyAdvice主要是对加了RestController(也就是ControllerResponseBody)注解的处理器将要返回的值进行增强处理。*其实也就是采用了AOP的思想对返回值进行一次修改。*/ RestControllerAdvice public class FunctionResponseBodyAdvice implements ResponseBodyAdvice {//判断当前类上是否有FunctionResultprotected boolean isFunctionResult(MethodParameter returnType) {/*** getContainingClass() 获取当前类的信息* isAnnotationPresent 判断当前类上是否存在某个注解*/Class? containingClass returnType.getContainingClass();boolean annotationPresent containingClass.isAnnotationPresent(FunctionResult.class);Annotation[] annotations containingClass.getAnnotations();return returnType.getContainingClass().isAnnotationPresent(FunctionResult.class);}Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return isFunctionResult(returnType);}Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {Method method returnType.getMethod();Class? methodReturnType method.getReturnType();//判断是否为void的方法if (methodReturnType.equals(void.class)) {return body;}//判断当前方法是否有FunctionResult注解如果没有则全部按照成功返回如果有则根据具体指定的返回码以及返回内容返回FunctionResult result returnType.getMethod().getAnnotation(FunctionResult.class);if (result null) {return new BaseResponse(ResultCode.SUCCESS, body);}ResultCode code result.code();return new BaseResponse(result.code(), body);} } controller类 import com.study.project.annotation.FunctionResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;/*** date 2023/2/4*/ FunctionResult RestController public class TestController {RequestMapping(/test5)public int test5(){return 1;}RequestMapping(/test6)public void test6(){System.err.println(test6);} } 测试 你是不是以为代码已经结束 其实这个代码是有问题hhhhh当接口的返回类型是String的时候就会提示报错 看控制台的报错信息发现是接口的返回参数转换的时候报错了于是我们根据控制台上的报错信息进行断点排查 首先我们找到控制台中的第一行的报错类StringHttpMessageConverter.java中的addDefaultHeaders方法发这个方法其实是重新了他父类的AbstractHttpMessageConverter的方法 在AbstractHttpMessageConverter中的方法Result的参数是T但是StringHttpMessageConverter在重写的时候将其转为了String因此当ResponseBodyAdvice返回Result格式的时候就会报错所以我们就需要在ResponseBodyAdvice中需要单独处理一下String类型。 完整代码 import cn.hutool.json.JSONUtil; import com.study.project.annotation.FunctionResult; import jdk.nashorn.internal.objects.annotations.Function; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import java.lang.annotation.Annotation; import java.lang.reflect.Method;/*** author Chengming.Zhang* date 2023/2/18* ResponseBodyAdvice主要是对加了RestController(也就是ControllerResponseBody)注解的处理器将要返回的值进行增强处理。*其实也就是采用了AOP的思想对返回值进行一次修改。*/ RestControllerAdvice public class FunctionResponseBodyAdvice implements ResponseBodyAdvice {//判断当前类上是否有FunctionResultprotected boolean isFunctionResult(MethodParameter returnType) {/*** getContainingClass() 获取当前类的信息* isAnnotationPresent 判断当前类上是否存在某个注解*/Class? containingClass returnType.getContainingClass();boolean annotationPresent containingClass.isAnnotationPresent(FunctionResult.class);Annotation[] annotations containingClass.getAnnotations();return returnType.getContainingClass().isAnnotationPresent(FunctionResult.class);}Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return isFunctionResult(returnType);}Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {Method method returnType.getMethod();Class? methodReturnType method.getReturnType();if (methodReturnType.equals(void.class)) {return body;}//判断当前方法是否有FunctionResult注解如果没有则全部按照成功返回如果有则根据具体指定的返回码以及返回内容返回FunctionResult result returnType.getMethod().getAnnotation(FunctionResult.class);if (result null) {if (body instanceof String) {return JSONUtil.toJsonStr(new BaseResponse(ResultCode.SUCCESS, body));}return new BaseResponse(ResultCode.SUCCESS, body);}if (body instanceof String) {return JSONUtil.toJsonStr(new BaseResponse(result.code(), body));}return new BaseResponse(result.code(), body);} }
http://www.hkea.cn/news/14273603/

相关文章:

  • 重庆好的网站建设宁波网站建设公司费用价格
  • 网站设计怎么做ppt答辩外贸流程优化
  • 电商网站项目家政公司
  • 襄城县住房和城乡建设局网站不良网站代码怎么查
  • 本地网站搭建工具企业网络规划设计
  • 网站设计的优点和缺点保健品商城网站模板
  • 域名申请哪个网站好python采集到wordpress
  • 网站建设中数据字典东莞wordpress
  • 网站开发专业分析瑞安做网站的公司
  • 快速迁移网站昆明网站
  • 自己建商城型网站南山住房和建设局网站官网
  • 厦门做网站seo的wordpress自带高亮
  • 网站建设到上线easy ssl wordpress
  • 无锡哪家做网站好ecxl表格数据导入wordpress
  • 湘潭网站建设酒店类网站建设方案书
  • 卖水果网站模板wordpress支付方案解决
  • 贾汪网站建设关于申请建设网站申请报告
  • 宿州网站建设优化app开发公司定制小程序
  • 国内网站开发 框架建站公司费用情况
  • 做网站要提供什么宁波seo外包代运营
  • 网页设计图片叠加wordpress分类设置seo
  • 外接硬盘做创建立网站搭建一个app
  • 做网站生意多吗织梦网站系统删除不了
  • 北京怎么建立网站字节跳动广告投放平台
  • 做网站需要看的书彬县网站建设
  • 建设主管部门门户网站网站建设公司一般几个人
  • 创意设计网站大全北京公司如何做网站
  • html做旅游网站库尔勒网站建设电话
  • 南京企业微信网站建设h5搭建
  • php大型网站开发前端开发和后端开发