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

网站刚做怎么做seo优化爱南宁健康码app下载

网站刚做怎么做seo优化,爱南宁健康码app下载,空间商指定的网站目录,包装设计网站排行榜简介 PS: advice, 在这里意思是顾问, 其余很多场景也是顾问的意思由于篇幅问题, 注释已删, 如想看注释, 请在github中查看 作用: 用于在Controller返回后, HttpMessageConverter执行转换之前执行一些转换 常见场景: 统一响应结构, 如json统一包装 由于版本不同, 多少有些差异…简介 PS: advice, 在这里意思是顾问, 其余很多场景也是顾问的意思由于篇幅问题, 注释已删, 如想看注释, 请在github中查看 作用: 用于在Controller返回后, HttpMessageConverter执行转换之前执行一些转换 常见场景: 统一响应结构, 如json统一包装 由于版本不同, 多少有些差异, 所以不贴源码了, 基本上springboot2.x和3.x是通用的 简单做个翻译(springboot3.1.5为例): public interface ResponseBodyAdviceT {/*** 此Advice是否使用于该返回类型和Converter类型(意思是可以配置多个哦)* param returnType 返回类型(这里可以获取很多东西, 别被名字误导了)* param converterType 自动选择的转换器类型* return 返回true表示将会走接下来的方法(beforeBodyWrite), 否则不会*/boolean supports(MethodParameter returnType, Class? extends HttpMessageConverter? converterType);/*** HttpMessageConverter转换之前进行的操作* param body 要转换的body* param returnType 返回类型* param selectedContentType 根据请求头协商的ContentType* param selectedConverterType 自动选择的转换器类型* param request 当前请求* param response 当前响应* return 修改后的响应内容*/NullableT beforeBodyWrite(Nullable T body, MethodParameter returnType, MediaType selectedContentType,Class? extends HttpMessageConverter? selectedConverterType,ServerHttpRequest request, ServerHttpResponse response);} 示例 RestControllerAdvice public class ResAdvice implements ResponseBodyAdviceObject {Overridepublic boolean supports(NotNull MethodParameter returnType, NotNull Class? extends HttpMessageConverter? converterType) {return returnType.getContainingClass().getPackageName().startsWith(kim.nzxy.ly);}Overridepublic Object beforeBodyWrite(Object body,NotNull MethodParameter returnType,NotNull MediaType selectedContentType,NotNull Class? extends HttpMessageConverter? selectedConverterType,NotNull ServerHttpRequest request,NotNull ServerHttpResponse response) {if (body instanceof Res? || !selectedContentType.equals(MediaType.APPLICATION_JSON)) {return body;}if (body instanceof Page?) {// 我的分页有特殊处理return Res.page((Page?)body);}return Res.ok(body);} }解释一下代码: supports判断, 如果类为自己的包下的类, 则允许处理 beforeBodyWrite作用: 如果响应内容不是JSON(可能是文件之类的), 或者已经被公共响应(Res)类包装过了, 就直接返回; 否则则在外面包装一层Res类 附Res.java package kim.nzxy.ly.common.res;import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import kim.nzxy.ly.common.exception.LyException; import lombok.Data; import lombok.experimental.Accessors;Data public class ResT {private static final String SUCCESS_MESSAGE 操作成功;private String message;private int code;private T data;private long timestamp System.currentTimeMillis();public static T ResT ok(T data, String message) {if (data instanceof Page) {throw new LyException.Panic(使用Res#page方法来返回分页数据);}ResT msg new ResT();msg.setCode(2000);msg.setMessage(message);msg.setData(data);return msg;}public static T ResT ok(T data) {return Res.ok(data, SUCCESS_MESSAGE);}public static T ResT ok(String message) {// noinspection uncheckedreturn Res.ok((T) message, message);}public static T ResT ok() {return Res.ok(null, SUCCESS_MESSAGE);}public static T ResT fail(String message, int code) {ResT msg new Res();msg.setCode(code);msg.setMessage(message);return msg;}public static T ResT fail(String message) {return Res.fail(message, 5000);}public static T ResPagingVOT page(PageT page) {PagingVOT data new PagingVO();data.setPages(Math.toIntExact(page.getPages()));data.setPageSize(Math.toIntExact(page.getSize()));data.setList(page.getRecords());data.setTotal(Math.toIntExact(page.getTotal()));data.setPageNum(Math.toIntExact(page.getCurrent()));return ok(data);} }常见问题 Controller中返回String类型, 会报类转换异常错误 解决方案: 如果项目中String类型都是要统一包装的, 那就直接干掉所有StringHttpMessageConverter Configuration public class StringHttpMessageConvertRemover implements WebMvcConfigurer {Overridepublic void extendMessageConverters(ListHttpMessageConverter? converters) {converters.removeIf(it - it instanceof StringHttpMessageConverter);} }或者不管String类型了 Override public boolean supports(NotNull MethodParameter returnType, NotNull Class? extends HttpMessageConverter? converterType) {if (java.lang.String.equals(returnType.getParameterType().getName())) {return false;}return returnType.getContainingClass().getPackageName().startsWith(kim.nzxy.ly); }OpenAPI Knife4J等, 额外包装一层 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import kim.nzxy.ly.common.res.PagingVO; import kim.nzxy.ly.common.res.Res; import org.apache.commons.lang3.reflect.TypeUtils; import org.springdoc.core.parsers.ReturnTypeParser; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.MethodParameter; import org.springframework.core.io.Resource;import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Optional;/*** author ly-chn* since 2024/1/24 10:58*/ Configuration public class ApiDocOperationCustomizer {Beanpublic ReturnTypeParser returnTypeParser() {return new ReturnTypeParser() {Overridepublic Type getReturnType(MethodParameter methodParameter) {Type returnType ReturnTypeParser.super.getReturnType(methodParameter);Class? parameterType methodParameter.getParameterType();// 资源文件或者已经被包装了, 直接返回if (parameterType.isAssignableFrom(Resource.class) || parameterType.isAssignableFrom(Res.class)) {return returnType;}// 分页特殊处理, 转为PagingVO类if (parameterType.isAssignableFrom(Page.class) returnType instanceof ParameterizedType) {OptionalType t TypeUtils.getTypeArguments((ParameterizedType) returnType).values().stream().findFirst();Type type t.orElse(Object.class);return TypeUtils.parameterize(Res.class, TypeUtils.parameterize(PagingVO.class, type));}// void转为ResObjectif (parameterType.isAssignableFrom(void.class)) {return TypeUtils.parameterize(Res.class, Object.class);}// 包装Resreturn TypeUtils.parameterize(Res.class, returnType);}};} }直接写Response 直接写 OutputStream 怎么办 本来我也担心, 但是ResponseBodyAdvice类是Controller返回后, HttpMessageConverter执行转换之前执行, 所以无需担心直接写, 然后返回void的问题 我做了这么一个测试, 不会走ResponseBodyAdvice, 但是此时Swagger/Knife4f, openapi就无能为力了, 因为没法从代码中获取是否有文件下载 GetMapping(void-with-byte) public void testVoidWithByte(HttpServletResponse response) throws IOException {response.setContentType(application/octet-stream;charsetutf-8);response.setHeader(HttpHeaders.CONTENT_DISPOSITION, attachment;filenameapplication.yml);ClassPathResource resource new ClassPathResource(application.yml);response.getOutputStream().write(resource.getContentAsByteArray()); }
http://www.pierceye.com/news/789671/

相关文章:

  • 浅谈网站建设开发浙江中联建设集团网站
  • 哪有做网站全包圆装修公司
  • 邵阳建设银行网站是多少建设银行 企业
  • 网站开源系统网页制作与网站建设思维导图
  • 专门做前端项目的一些网站wordpress 朋友圈插件
  • 网站建设哪家专业网站开发费用怎么做账
  • 用dw怎么做网站首页wordpress 文章页面失败
  • 郑州网站制作专业乐云seowordpress it博客主题
  • 支付宝手机网站支付二维码怎么做网站 开发
  • 教育网站制作视频代理网址ag80hncom
  • 泰兴公司做网站建设制作外贸网站公司
  • 手机wap网站大全作品提示优化要删吗
  • 郑州网站建设技术支持云南澄江县建设局网站
  • wordpress建企业网站设置网站一级域名和二级域名
  • 云南省城乡与住房建设厅网站合肥网红打卡地
  • 用dw做的企业网站宁波seo优化费用
  • 网站制作开发建网站公司 蓝纤科技
  • 怎样到国外做合法网站法网站网站建设小组实验报告
  • DNF做钓鱼网站网站建设方案书编写
  • 提高网站粘性wordpress tag中文
  • 公司已有网站 如何自己做推广wordpress的音乐插件怎么用
  • 权威网站php wordpress 等
  • 建设网站企业公司中通建设计院第四分公司网站
  • 快站免费网站建设哪家好南宁市住房建设局网站
  • 学生做的网站成品roseonly企业网站优化
  • 台前网站建设电话百度账号注册申请
  • 政和县建设局网站公告征婚网站咋做
  • 做网站需要用到的语言注册公司需要多少钱保证金
  • 如何给别人做网站赚钱互联网广告营销方案
  • 上海专业做网站公司地址软文代写