首页
关于
留言
统计
友链
壁纸
影视
留言找电影
Search
1
java jdk17版本使用cglib报错问题解决
321 阅读
2
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
117 阅读
3
Java实现双链表插入排序~渡星河全网首发
106 阅读
4
Java打印某年某月的日历~不调用函数
76 阅读
5
Java中判断是否是闰年
70 阅读
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
登录
/
注册
Search
标签搜索
java
java作业
恋爱
动漫
3A大作
独行月球
电影分享
总之就是非常可爱
JavaScript
office
破解
mysql
vue
java打包
跨域
tomcat解决乱码
bug解决
tomcat
vscode
渡星河
累计撰写
94
篇文章
累计收到
30
条评论
首页
栏目
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
页面
关于
留言
统计
友链
壁纸
影视
留言找电影
搜索到
93
篇与
的结果
2023-04-18
vue+elementui实现表格导出为excel文件
在我们的后端项目中将表格导出为excel文件是在正常不过的了{mtitle title="避坑指南"/}不要用最新的 npm install xlsx --save 依赖使用稳定版本的 npm install xlsx@0.16.2 --save不用稳定版本的会出现各种灵异事件报错安装以后就可以直接导入使用了,下面是一个使用例子<template> <div> <el-button type="primary" @click="exportExcel">导出 Excel</el-button> <el-table :data="tableData" style="width: 100%" :row-class-name="tableRowClassName" > <el-table-column prop="date" label="日期" width="180" /> <el-table-column prop="name" label="姓名" width="180" /> <el-table-column prop="address" label="地址" /> </el-table> </div> </template> <script> import XLSX from 'xlsx' export default { data() { return { tableData: [ { date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' } ] } }, methods: { tableRowClassName({ row, rowIndex }) { if (rowIndex === 1) { return 'warning-row' } else if (rowIndex === 3) { return 'success-row' } return '' }, exportExcel() { console.log('年hi') const wb = XLSX.utils.book_new() const ws = XLSX.utils.json_to_sheet(this.tableData) XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') XLSX.writeFile(wb, 'data.xlsx') } } } </script> <style> .el-table .warning-row { background: oldlace; } .el-table .success-row { background: #f0f9eb; } </style>
2023年04月18日
11 阅读
0 评论
2 点赞
2023-04-16
使用fastjson解析json字符串
import com.alibaba.fastjson.JSONObject; public class JsonParser { public static void main(String[] args) { String jsonString = "{\"algo_version\":\"adbdfe6d95e774e94e4b0b86b40b194e03807c75\",\"data\":{\"face\":{\"algo_version\":\"adbdfe6d95e774e94e4b0b86b40b194e03807c75\",\"angle\":0,\"data\":{\"address\":\"贵州省\",\"birthDate\":\"2000年13月27日\",\"ethnicity\":\"苗\",\"idNumber\":\"110423245012215153\",\"name\":\"八嘎\",\"sex\":\"男\"},\"figure\":[{\"box\":{\"angle\":0,\"h\":494,\"w\":411,\"x\":1332,\"y\":682},\"h\":497,\"points\":[{\"x\":1127,\"y\":435},{\"x\":1539,\"y\":435},{\"x\":1538,\"y\":929},{\"x\":1126,\"y\":929}],\"type\":\"face\",\"w\":414,\"x\":1126,\"y\":434}],\"ftype\":0,\"height\":910,\"orgHeight\":910,\"orgWidth\":1434,\"prism_keyValueInfo\":[{\"key\":\"name\",\"keyProb\":100,\"value\":\"八嘎\",\"valuePos\":[{\"x\":532,\"y\":398},{\"x\":690,\"y\":396},{\"x\":691,\"y\":456},{\"x\":532,\"y\":458}],\"valueProb\":100},{\"key\":\"sex\",\"keyProb\":100,\"value\":\"男\",\"valuePos\":[{\"x\":529,\"y\":514},{\"x\":575,\"y\":514},{\"x\":574,\"y\":565},{\"x\":527,\"y\":564}],\"valueProb\":100},{\"key\":\"ethnicity\",\"keyProb\":100,\"value\":\"苗\",\"valuePos\":[{\"x\":802,\"y\":519},{\"x\":849,\"y\":519},{\"x\":849,\"y\":567},{\"x\":802,\"y\":567}],\"valueProb\":100},{\"key\":\"birthDate\",\"keyProb\":100,\"value\":\"2000年12月21日\",\"valuePos\":[{\"x\":524,\"y\":621},{\"x\":908,\"y\":626},{\"x\":907,\"y\":668},{\"x\":523,\"y\":663}],\"valueProb\":100},{\"key\":\"address\",\"keyProb\":100,\"value\":\"贵州省八嘎\",\"valuePos\":[{\"x\":518,\"y\":730},{\"x\":1084,\"y\":738},{\"x\":1082,\"y\":862},{\"x\":516,\"y\":854}],\"valueProb\":100},{\"key\":\"idNumber\",\"keyProb\":100,\"value\":\"522423200012215153\",\"valuePos\":[{\"x\":731,\"y\":1025},{\"x\":1486,\"y\":1019},{\"x\":1486,\"y\":1073},{\"x\":731,\"y\":1079}],\"valueProb\":100}],\"sliceRect\":{\"x0\":259,\"x1\":1634,\"x2\":1655,\"x3\":223,\"y0\":266,\"y1\":281,\"y2\":1175,\"y3\":1165},\"width\":1434}},\"height\":1279,\"orgHeight\":1279,\"orgWidth\":1704,\"width\":1704}}"; JSONObject jsonObject = JSONObject.parseObject(jsonString); JSONObject faceData = jsonObject.getJSONObject("data").getJSONObject("face").getJSONObject("data"); String address = faceData.getString("address"); String birthDate = faceData.getString("birthDate"); String ethnicity = faceData.getString("ethnicity"); String idNumber = faceData.getString("idNumber"); String name = faceData.getString("name"); String sex = faceData.getString("sex"); System.out.println("地址:" + address); System.out.println("出生日期:" + birthDate); System.out.println("民族:" + ethnicity); System.out.println("身份证号码:" + idNumber); System.out.println("姓名:" + name); System.out.println("性别:" + sex); } }
2023年04月16日
8 阅读
0 评论
0 点赞
2023-04-15
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
今天通过阿里云的orc服务写身份证识别功能,好家伙当我获取body部分后发现json格式不正确,这就麻烦了,不正确我获取名字啊,身份证什么的就麻烦,我就想着去修复一下,后面发现可以直接使用gson来进行修复import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.JsonObject; String incorrectJson = "{name: \"John Doe\", age: 30, email: \"john.doe@example.com\"}"; System.out.println("Incorrect JSON: " + incorrectJson); // 使用Gson库来修复JSON格式 Gson gson = new Gson(); JsonObject jsonObject = null; try { jsonObject = gson.fromJson(incorrectJson, JsonObject.class); } catch (JsonSyntaxException e) { System.out.println("Error: " + e.getMessage()); } // 将修复后的JSON转换为字符串 String correctJson = gson.toJson(jsonObject); System.out.println("Correct JSON: " + correctJson);总结就是好用
2023年04月15日
117 阅读
0 评论
0 点赞
2023-04-14
字符串时间转Date类型 ,@ControllerAdvice注解定义的controller类@InitBinder注解功能失效原因
起因我们先来看一下我的全局配置类package cn.yyx.common; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.InitBinder; import java.text.SimpleDateFormat; import java.util.Date; /** * 给全局添加@InitBinder注解 * 不用给每个controller添加此方法 */ @ControllerAdvice public class GlobalBindingInitializer { @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); } } 首先这个类是把客户端传过来的字符串时间转换成为Date类型,并且是全局的,不用每个controller类都去配置,可以这么说,很好用啊{message type="error" content="但是他今天失效了"/}失效场景我今天做项目用到的技术栈如下 springboot,mybatis-plus,springsecurity等失效原因就是因为使用了security做权限验证出的冲突问题因为 Spring Security 默认情况下也会定义一个全局的 WebMvcConfigurer 实现类,并注册到应用上下文中。这个全局类会覆盖掉我们自己定义的 GlobalBindingInitializer 类,导致我们自己定义的日期格式化失效解决方案解决这个问题的方法是,在我们自己定义的 GlobalBindingInitializer 类上添加 @ConditionalOnMissingBean 注解,表示当 Spring 容器中不存在 WebMvcConfigurer 类型的 Bean 时才扫描并注册这个类。具体代码如下:@ControllerAdvice @ConditionalOnMissingBean(WebMvcConfigurer.class) public class GlobalBindingInitializer { @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); } } 2.解决方法二,直接在security的配置类写时间转换例如下方代码,最=最后一个bean注解package cn.yyx.security.config; import cn.yyx.security.filter.TokenAuthenticationFilter; import cn.yyx.security.filter.TokenLoginFilter; import cn.yyx.security.security.TokenLogoutHandler; import cn.yyx.security.security.TokenManager; import cn.yyx.security.security.UnauthorizedEntryPoint; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import java.text.SimpleDateFormat; import java.util.Date; /** * 该类是用了进行认证配置的 */ @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) @ControllerAdvice public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private PasswordEncoder passwordEncoder; @Autowired private UserDetailsService userDetailsService; @Autowired private TokenManager tokenManager; @Autowired private RedisTemplate redisTemplate; /** * 密码处理 * @param auth * @throws Exception */ @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); } /** * 绑定权限和对应的路径 * @param http * @throws Exception */ @Override protected void configure(HttpSecurity http) throws Exception { http.exceptionHandling() .authenticationEntryPoint(new UnauthorizedEntryPoint()) .and().csrf().disable() .cors().configurationSource(corsConfigurationSource()) .and() .authorizeRequests() .anyRequest().authenticated() .and().logout().logoutUrl("/admin/acl/index/logout") .addLogoutHandler(new TokenLogoutHandler(tokenManager,redisTemplate)).and() //添加认证过滤器 authenticationManager()这是调用了父类的认证管理器 // tokenManager 对token管理的对象(生成和解析token) .addFilter(new TokenLoginFilter(authenticationManager(), tokenManager, redisTemplate)) //添加授权过滤器 .addFilter(new TokenAuthenticationFilter(authenticationManager(), tokenManager, redisTemplate)).httpBasic(); http.cors(); } @Bean public CorsConfigurationSource corsConfigurationSource() { CorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); //同源配置,*表示任何请求都视为同源,若需指定ip和端口可以改为如“localhost:8080”,多个以“,”分隔; corsConfiguration.addAllowedHeader("*");//header,允许哪些header,本案中使用的是token,此处可将*替换为token; corsConfiguration.addAllowedMethod("*"); //允许的请求方法,PSOT、GET等 ((UrlBasedCorsConfigurationSource) source).registerCorsConfiguration("/**", corsConfiguration); //配置允许跨域访问的url return source; } //使用PasswordEncoder 接口的实现类进行加密 @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } /** * 配置哪些请求不拦截 * @param web * @throws Exception */ @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/api/**","/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui/**","/customer/add","/order/save"); } @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); } @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd")); return objectMapper; } }3.解决方法三就是直接在实体类使用注解解决,例如@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private Date hiredate;{message type="success" content="不仅是解决方法,还是实现字符串转时间的方法"/}
2023年04月14日
14 阅读
0 评论
2 点赞
2023-04-13
Java封装一个通用返回类,用于返回统一json数据
网上找了很多都感觉和自己的业务不匹配就封装了package com.galaxy.empvue.common; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.http.HttpStatus; import java.io.Serial; import java.io.Serializable; @Data @Accessors(chain = true) public class R<T> implements Serializable { @Serial private static final long serialVersionUID = 1L; private int code; // 响应状态码 private String message; // 响应信息 private T data; // 响应数据 // 无参构造函数,默认响应状态码为 200,响应信息为 "success" public R() { this.code = HttpStatus.OK.value(); this.message = "success"; } // 带有响应数据的构造函数,响应状态码为 200,响应信息为 "success" public R(T data) { this(); if (data != null) { this.data = data; } } // 自定义响应状态码和响应信息的构造函数 public R(int code, String message) { this.code = code; this.message = message; } // 带有响应数据、响应状态码和响应信息的构造函数 public R(T data, int code, String message) { this(code, message); if (data != null) { this.data = data; } } // 返回一个默认的成功响应对象,响应状态码为 200,响应信息为 "success" public static <T> R<T> success() { return new R<>(); } // 返回一个带有响应数据的成功响应对象,响应状态码为 200,响应信息为 "success" public static <T> R<T> success(T data) { return new R<>(data); } // 返回一个带有自定义响应信息的成功响应对象,响应状态码为 200 public static <T> R<T> success(String message) { return new R<T>().setMessage(message); } // 返回一个带有响应数据和自定义响应信息的成功响应对象,响应状态码为 200 public static <T> R<T> success(T data, String message) { return new R<>(data).setMessage(message); } // 返回一个带有自定义响应状态码和响应信息的失败响应对象 public static <T> R<T> failure(int code, String message) { return new R<>(code, message); } // 返回一个带有自定义响应信息的失败响应对象,响应状态码为 500 public static <T> R<T> failure(String message) { return new R<T>() .setCode(HttpStatus.INTERNAL_SERVER_ERROR.value()) .setMessage(message) .setData(null); // 将 data 字段设置为 null } // 返回一个默认的失败响应对象,响应状态码为 500,响应信息为 "操作失败" public static <T> R<T> failure() { return new R<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), "操作失败"); } } 第二种package cn.yyx.common; import cn.yyx.utils.ResultCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.HashMap; import java.util.Map; //统一返回结果的类 @Data public class R { @ApiModelProperty(value = "是否成功") private Boolean success; @ApiModelProperty(value = "返回码") private Integer code; @ApiModelProperty(value = "返回消息") private String message; @ApiModelProperty(value = "返回数据") private Map<String, Object> data = new HashMap<String, Object>(); //把构造方法私有 private R() { } //成功静态方法 public static R ok() { R r = new R(); r.setSuccess(true); r.setCode(200); r.setMessage("成功"); return r; } public static R error() { R r = new R(); r.setSuccess(false); r.setCode(-1); r.setMessage("操作失败"); return r; } public R success(Boolean success) { this.setSuccess(success); return this; } public R message(String message) { this.setMessage(message); return this; } public R code(Integer code) { this.setCode(code); return this; } public R data(String key, Object value) { this.data.put(key, value); return this; } public R data(Map<String, Object> map) { this.setData(map); return this; } public Boolean getSuccess() { return success; } public void setSuccess(Boolean success) { this.success = success; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Map<String, Object> getData() { return data; } public void setData(Map<String, Object> data) { this.data = data; } } 若依通用返回类package com.ruoyi.common.core.domain; import java.util.HashMap; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.utils.StringUtils; /** * 操作消息提醒 * * @author ruoyi */ public class AjaxResult extends HashMap<String, Object> { private static final long serialVersionUID = 1L; /** 状态码 */ public static final String CODE_TAG = "code"; /** 返回内容 */ public static final String MSG_TAG = "msg"; /** 数据对象 */ public static final String DATA_TAG = "data"; /** * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 */ public AjaxResult() { } /** * 初始化一个新创建的 AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 */ public AjaxResult(int code, String msg) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); } /** * 初始化一个新创建的 AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 * @param data 数据对象 */ public AjaxResult(int code, String msg, Object data) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); if (StringUtils.isNotNull(data)) { super.put(DATA_TAG, data); } } /** * 返回成功消息 * * @return 成功消息 */ public static AjaxResult success() { return AjaxResult.success("操作成功"); } /** * 返回成功数据 * * @return 成功消息 */ public static AjaxResult success(Object data) { return AjaxResult.success("操作成功", data); } /** * 返回成功消息 * * @param msg 返回内容 * @return 成功消息 */ public static AjaxResult success(String msg) { return AjaxResult.success(msg, null); } /** * 返回成功消息 * * @param msg 返回内容 * @param data 数据对象 * @return 成功消息 */ public static AjaxResult success(String msg, Object data) { return new AjaxResult(HttpStatus.SUCCESS, msg, data); } /** * 返回警告消息 * * @param msg 返回内容 * @return 警告消息 */ public static AjaxResult warn(String msg) { return AjaxResult.warn(msg, null); } /** * 返回警告消息 * * @param msg 返回内容 * @param data 数据对象 * @return 警告消息 */ public static AjaxResult warn(String msg, Object data) { return new AjaxResult(HttpStatus.WARN, msg, data); } /** * 返回错误消息 * * @return 错误消息 */ public static AjaxResult error() { return AjaxResult.error("操作失败"); } /** * 返回错误消息 * * @param msg 返回内容 * @return 错误消息 */ public static AjaxResult error(String msg) { return AjaxResult.error(msg, null); } /** * 返回错误消息 * * @param msg 返回内容 * @param data 数据对象 * @return 错误消息 */ public static AjaxResult error(String msg, Object data) { return new AjaxResult(HttpStatus.ERROR, msg, data); } /** * 返回错误消息 * * @param code 状态码 * @param msg 返回内容 * @return 错误消息 */ public static AjaxResult error(int code, String msg) { return new AjaxResult(code, msg, null); } /** * 方便链式调用 * * @param key 键 * @param value 值 * @return 数据对象 */ @Override public AjaxResult put(String key, Object value) { super.put(key, value); return this; } }
2023年04月13日
36 阅读
0 评论
1 点赞
1
...
5
6
7
...
19