fastjson toJSONString
SerializerFeature
https://blog.csdn.net/u010246789/article/details/52539576
1.空值原样返回
SerializerFeature.WRITE_MAP_NULL_FEATURES
final static int serializerFeature = SerializerFeature.QuoteFieldNames.getMask() | SerializerFeature.WriteMapNullValue.getMask();
2.序列化私有成员(按需)
final static int serializerFeature = SerializerFeature.WriteMapNullValue.getMask() | SerializerFeature.WriteNullListAsEmpty.getMask() | SerializerFeature.QuoteFieldNames.getMask();
后执行
var encryptor = new JSEncrypt()
const publicKey = '公钥'
const privateKey = '私钥'
// Convert a hex string to a byte array
function hexToBytes(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2) {
bytes.push(parseInt(hex.substr(c, 2), 16))
}
return bytes
}
// Convert a byte array to a hex string
function bytesToHex(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++) {
hex.push((bytes[i] >>> 4).toString(16))
hex.push((bytes[i] & 0xF).toString(16))
}
return hex.join('')
}
var BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz'
function int2char(n) {
return BI_RM.charAt(n)
}
var b64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
var b64pad = '='
function hex2b64(h) {
var i
var c
var ret = ''
for (i = 0; i + 3 <= h.length; i += 3) {
c = parseInt(h.substring(i, i + 3), 16)
ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63)
}
if (i + 1 == h.length) {
c = parseInt(h.substring(i, i + 1), 16)
ret += b64map.charAt(c << 2)
} else if (i + 2 == h.length) {
c = parseInt(h.substring(i, i + 2), 16)
ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4)
}
while ((ret.length & 3) > 0) {
ret += b64pad
}
return ret
}
// convert a base64 string to hex
function b64tohex(s) {
var ret = ''
var i
var k = 0 // b64 state, 0-3
var slop = 0
for (i = 0; i < s.length; ++i) {
if (s.charAt(i) == b64pad) {
break
}
var v = b64map.indexOf(s.charAt(i))
if (v < 0) {
continue
}
if (k == 0) {
ret += int2char(v >> 2)
slop = v & 3
k = 1
} else if (k == 1) {
ret += int2char((slop << 2) | (v >> 4))
slop = v & 0xf
k = 2
} else if (k == 2) {
ret += int2char(slop)
ret += int2char(v >> 2)
slop = v & 3
k = 3
} else {
ret += int2char((slop << 2) | (v >> 4))
ret += int2char(v & 0xf)
k = 0
}
}
if (k == 1) {
ret += int2char(slop << 2)
}
return ret
}
// 方法一
JSEncrypt.prototype.encryptLong = function (d) {
var k = this.key
var maxLength = (((k.n.bitLength() + 7) >> 3) - 11)
try {
var lt = ''
var ct = ''
if (d.length > maxLength) {
lt = d.match(/.{1,117}/g)
lt.forEach(function (entry) {
var t1 = k.encrypt(entry)
ct += t1
})
return hexToBytes(ct)
}
var t = k.encrypt(d)
var y = hexToBytes(t)
return y
} catch (ex) {
return false
}
}
JSEncrypt.prototype.decryptLong = function (string) {
var k = this.getKey()
var maxLength = ((k.n.bitLength() + 7) >> 3)
// var maxLength = 128;
try {
var str = bytesToHex(string)
// var b=hex2Bytes(str);
var inputLen = str.length
var ct = ''
if (str.length > maxLength) {
var lt = str.match(/.{1,256}/g)
lt.forEach(function (entry) {
var t1 = k.decrypt(entry)
ct += t1
})
return ct
}
var y = k.decrypt(bytesToHex(string))
return y
} catch (ex) {
return false
}
}
// 方法2
JSEncrypt.prototype.encryptLong2 = function (string) {
var k = this.getKey()
try {
var lt = ''
var ct = ''
// RSA每次加密117bytes,需要辅助方法判断字符串截取位置
// 1.获取字符串截取点
var bytes = new Array()
bytes.push(0)
var byteNo = 0
var len, c
len = string.length
var temp = 0
for (var i = 0; i < len; i++) {
c = string.charCodeAt(i)
if (c >= 0x010000 && c <= 0x10FFFF) {
byteNo += 4
} else if (c >= 0x000800 && c <= 0x00FFFF) {
byteNo += 3
} else if (c >= 0x000080 && c <= 0x0007FF) {
byteNo += 2
} else {
byteNo += 1
}
if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {
if (byteNo - temp >= 114) {
bytes.push(i)
temp = byteNo
}
}
}
// 2.截取字符串并分段加密
if (bytes.length > 1) {
for (var i = 0; i < bytes.length - 1; i++) {
var str
if (i == 0) {
str = string.substring(0, bytes[i + 1] + 1)
} else {
str = string.substring(bytes[i] + 1, bytes[i + 1] + 1)
}
var t1 = k.encrypt(str)
ct += t1
}
if (bytes[bytes.length - 1] != string.length - 1) {
var lastStr = string.substring(bytes[bytes.length - 1] + 1)
ct += k.encrypt(lastStr)
}
// return hexToBytes(ct)
return hex2b64(ct)
}
var t = k.encrypt(string)
// var y = hexToBytes(t)
var y = hex2b64(t)
return y
} catch (ex) {
return false
}
}
function strtohex(code) {
var hexstr = []
for (var i = 0; i < code.length; i++) {
hexstr += code.charCodeAt(i).toString(16)
}
return hexstr
}
JSEncrypt.prototype.decryptLong2 = function (string) {
var k = this.getKey()
// var maxLength = ((k.n.bitLength()+7)>>3);
var MAX_DECRYPT_BLOCK = 128
try {
var ct = ''
var t1
var bufTmp
var hexTmp
// var str = bytesToHex(string)
var str = b64tohex(string)
var buf = hexToBytes(str)
var inputLen = buf.length
// 开始长度
var offSet = 0
// 结束长度
var endOffSet = MAX_DECRYPT_BLOCK
// 分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
bufTmp = buf.slice(offSet, endOffSet)
hexTmp = bytesToHex(bufTmp)
t1 = k.decrypt(hexTmp)
ct += t1
} else {
bufTmp = buf.slice(offSet, inputLen)
hexTmp = bytesToHex(bufTmp)
t1 = k.decrypt(hexTmp)
ct += t1
}
offSet += MAX_DECRYPT_BLOCK
endOffSet += MAX_DECRYPT_BLOCK
}
return ct
} catch (ex) {
return false
}
}
// 加密
function encrypt(txt) {
txt = encodeURIComponent(txt)
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
let s = encryptor.encryptLong2(txt)
console.log('加密前:' + txt + '\n加密后:' + s)
return s
}
// 解密
function decrypt(txt) {
const decryptor = new JSEncrypt()
decryptor.setPrivateKey(privateKey)
let s = decryptor.decryptLong2(txt)
s = decodeURIComponent(s)
console.log('解密前:' + txt + '\n解密后:' + s)
return s
}
var text = response.json.data
console.log(text)
text = decrypt(text);
console.log(text)
response.raw.responseText=text
预执行
var encryptor = new JSEncrypt()
const publicKey = '公钥'
const privateKey = '私钥'
// Convert a hex string to a byte array
function hexToBytes(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2) {
bytes.push(parseInt(hex.substr(c, 2), 16))
}
return bytes
}
// Convert a byte array to a hex string
function bytesToHex(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++) {
hex.push((bytes[i] >>> 4).toString(16))
hex.push((bytes[i] & 0xF).toString(16))
}
return hex.join('')
}
var BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz'
function int2char(n) {
return BI_RM.charAt(n)
}
var b64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
var b64pad = '='
function hex2b64(h) {
var i
var c
var ret = ''
for (i = 0; i + 3 <= h.length; i += 3) {
c = parseInt(h.substring(i, i + 3), 16)
ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63)
}
if (i + 1 == h.length) {
c = parseInt(h.substring(i, i + 1), 16)
ret += b64map.charAt(c << 2)
} else if (i + 2 == h.length) {
c = parseInt(h.substring(i, i + 2), 16)
ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4)
}
while ((ret.length & 3) > 0) {
ret += b64pad
}
return ret
}
// convert a base64 string to hex
function b64tohex(s) {
var ret = ''
var i
var k = 0 // b64 state, 0-3
var slop = 0
for (i = 0; i < s.length; ++i) {
if (s.charAt(i) == b64pad) {
break
}
var v = b64map.indexOf(s.charAt(i))
if (v < 0) {
continue
}
if (k == 0) {
ret += int2char(v >> 2)
slop = v & 3
k = 1
} else if (k == 1) {
ret += int2char((slop << 2) | (v >> 4))
slop = v & 0xf
k = 2
} else if (k == 2) {
ret += int2char(slop)
ret += int2char(v >> 2)
slop = v & 3
k = 3
} else {
ret += int2char((slop << 2) | (v >> 4))
ret += int2char(v & 0xf)
k = 0
}
}
if (k == 1) {
ret += int2char(slop << 2)
}
return ret
}
// 方法一
JSEncrypt.prototype.encryptLong = function (d) {
var k = this.key
var maxLength = (((k.n.bitLength() + 7) >> 3) - 11)
try {
var lt = ''
var ct = ''
if (d.length > maxLength) {
lt = d.match(/.{1,117}/g)
lt.forEach(function (entry) {
var t1 = k.encrypt(entry)
ct += t1
})
return hexToBytes(ct)
}
var t = k.encrypt(d)
var y = hexToBytes(t)
return y
} catch (ex) {
return false
}
}
JSEncrypt.prototype.decryptLong = function (string) {
var k = this.getKey()
var maxLength = ((k.n.bitLength() + 7) >> 3)
// var maxLength = 128;
try {
var str = bytesToHex(string)
// var b=hex2Bytes(str);
var inputLen = str.length
var ct = ''
if (str.length > maxLength) {
var lt = str.match(/.{1,256}/g)
lt.forEach(function (entry) {
var t1 = k.decrypt(entry)
ct += t1
})
return ct
}
var y = k.decrypt(bytesToHex(string))
return y
} catch (ex) {
return false
}
}
// 方法2
JSEncrypt.prototype.encryptLong2 = function (string) {
var k = this.getKey()
try {
var lt = ''
var ct = ''
// RSA每次加密117bytes,需要辅助方法判断字符串截取位置
// 1.获取字符串截取点
var bytes = new Array()
bytes.push(0)
var byteNo = 0
var len, c
len = string.length
var temp = 0
for (var i = 0; i < len; i++) {
c = string.charCodeAt(i)
if (c >= 0x010000 && c <= 0x10FFFF) {
byteNo += 4
} else if (c >= 0x000800 && c <= 0x00FFFF) {
byteNo += 3
} else if (c >= 0x000080 && c <= 0x0007FF) {
byteNo += 2
} else {
byteNo += 1
}
if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {
if (byteNo - temp >= 114) {
bytes.push(i)
temp = byteNo
}
}
}
// 2.截取字符串并分段加密
if (bytes.length > 1) {
for (var i = 0; i < bytes.length - 1; i++) {
var str
if (i == 0) {
str = string.substring(0, bytes[i + 1] + 1)
} else {
str = string.substring(bytes[i] + 1, bytes[i + 1] + 1)
}
var t1 = k.encrypt(str)
ct += t1
}
if (bytes[bytes.length - 1] != string.length - 1) {
var lastStr = string.substring(bytes[bytes.length - 1] + 1)
ct += k.encrypt(lastStr)
}
// return hexToBytes(ct)
return hex2b64(ct)
}
var t = k.encrypt(string)
// var y = hexToBytes(t)
var y = hex2b64(t)
return y
} catch (ex) {
return false
}
}
function strtohex(code) {
var hexstr = []
for (var i = 0; i < code.length; i++) {
hexstr += code.charCodeAt(i).toString(16)
}
return hexstr
}
JSEncrypt.prototype.decryptLong2 = function (string) {
var k = this.getKey()
// var maxLength = ((k.n.bitLength()+7)>>3);
var MAX_DECRYPT_BLOCK = 128
try {
var ct = ''
var t1
var bufTmp
var hexTmp
// var str = bytesToHex(string)
var str = b64tohex(string)
var buf = hexToBytes(str)
var inputLen = buf.length
// 开始长度
var offSet = 0
// 结束长度
var endOffSet = MAX_DECRYPT_BLOCK
// 分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
bufTmp = buf.slice(offSet, endOffSet)
hexTmp = bytesToHex(bufTmp)
t1 = k.decrypt(hexTmp)
ct += t1
} else {
bufTmp = buf.slice(offSet, inputLen)
hexTmp = bytesToHex(bufTmp)
t1 = k.decrypt(hexTmp)
ct += t1
}
offSet += MAX_DECRYPT_BLOCK
endOffSet += MAX_DECRYPT_BLOCK
}
return ct
} catch (ex) {
return false
}
}
// 加密
function encrypt(txt) {
txt = encodeURIComponent(txt)
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
let s = encryptor.encryptLong2(txt)
console.log('加密前:' + txt + '\n加密后:' + s)
return s
}
// 解密
function decrypt(txt) {
const decryptor = new JSEncrypt()
decryptor.setPrivateKey(privateKey)
let s = decryptor.decryptLong2(txt)
s = decodeURIComponent(s)
console.log('解密前:' + txt + '\n解密后:' + s)
return s
}
var text = JSON.parse(request.request_bodys)
for (var key in text) {
apt.removeRequestBody(key);
}
console.log(request.request_bodys)
text = encrypt(request.request_bodys)
console.log(text)
apt.setRequestBody("data", text);
RSA
package com.bezkoder.szswzg.commons.utils;
import cn.hutool.core.net.URLDecoder;
import cn.hutool.core.net.URLEncoder;
import cn.hutool.core.util.StrUtil;
import com.bezkoder.szswzg.commons.XStringUtils;
import org.apache.commons.codec.binary.Base64;
import org.springframework.stereotype.Component;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
@Component
public class RsaNewUtils {
private static URLEncoder urlEncoder = new URLEncoder();
static {
//====================这些字符不会进行替换操作 减少带宽的消耗操作
// 前端传进来的数据先进行 encode 加密 防止中文传输的问题在进行rsa(或aes)加密操作
// 后端则是先进行 rsa(或aes)解密在进行 decode操作 这样中文就可以正常传输 防止带宽的消耗操作(下面定义的这些特殊字符是为了防止 解密数量变多的问题)===============================
//匹配 js encodeURIComponent() 函数
urlEncoder.addSafeCharacter('{');
urlEncoder.addSafeCharacter('}');
urlEncoder.addSafeCharacter('"');
urlEncoder.addSafeCharacter('[');
urlEncoder.addSafeCharacter(']');
urlEncoder.addSafeCharacter('-');
urlEncoder.addSafeCharacter('.');
urlEncoder.addSafeCharacter('_');
urlEncoder.addSafeCharacter('~');
urlEncoder.addSafeCharacter('!');
urlEncoder.addSafeCharacter('$');
urlEncoder.addSafeCharacter('&');
urlEncoder.addSafeCharacter('\'');
urlEncoder.addSafeCharacter('(');
urlEncoder.addSafeCharacter(')');
urlEncoder.addSafeCharacter('*');
urlEncoder.addSafeCharacter(',');
urlEncoder.addSafeCharacter(';');
urlEncoder.addSafeCharacter('=');
urlEncoder.addSafeCharacter('@');
urlEncoder.addSafeCharacter('/');
}
/**
* RSA最大加密明文大小 1024/8-11
*/
private static final int MAX_ENCRYPT_BLOCK = 117;
/**
* RSA最大解密密文大小 1024/8
*/
private static final int MAX_DECRYPT_BLOCK = 128;
/**
* 定义加密方式
*/
public static final String KEY_RSA = "RSA";
private static String PUBLIC_KEY = "公钥";
private static String PRIVATE_KEY = "私钥";
//私钥解密
private static Cipher Decipher = GetCipher(Cipher.DECRYPT_MODE, null, PRIVATE_KEY);
//公钥加密
private static Cipher Encipher = GetCipher(Cipher.ENCRYPT_MODE, PUBLIC_KEY, null);
public static Cipher GetCipher(int mothed, String publicKeyString, String privateKeyString) {
try {
if (StrUtil.isBlank(publicKeyString)) {
byte[] privateKeyBytes = Base64.decodeBase64(privateKeyString);
KeyFactory factory = KeyFactory.getInstance(KEY_RSA);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
PrivateKey privateKey = factory.generatePrivate(keySpec);
Cipher cipher = Cipher.getInstance(factory.getAlgorithm());
cipher.init(mothed, privateKey);
return cipher;
} else {
byte[] publicKeyBytes = Base64.decodeBase64(publicKeyString);
KeyFactory factory = KeyFactory.getInstance(KEY_RSA);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
PublicKey publicKey = factory.generatePublic(keySpec);
Cipher cipher = Cipher.getInstance(factory.getAlgorithm());
cipher.init(mothed, publicKey);
return cipher;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 公钥加密 如果大于117则分段加密
*/
public static String encryptByPublic(String publicKeyStr, String encryptingStr) {
try {
if (XStringUtils.isNotEmpty(encryptingStr)) {//不为空
// 避免中文乱码,前后端都要使用URL加解密中文
encryptingStr = urlEncoder.encode(encryptingStr, StandardCharsets.UTF_8);
byte[] data = encryptingStr.getBytes(StandardCharsets.UTF_8);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
synchronized (Encipher) {
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = Encipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = Encipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
}
byte[] encryptedData = out.toByteArray();
out.close();
return Base64.encodeBase64String(encryptedData);
}
return encryptingStr;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 私钥解密 如果大于128则分段解密
*/
public static String decryptByPrivate(String privateKeyStr, String encryptedStr) {
try {
byte[] data = Base64.decodeBase64(encryptedStr);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
synchronized (Decipher) {
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = Decipher.doFinal(data, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = Decipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
}
byte[] decryptedData = out.toByteArray();
out.close();
// 避免中文乱码,前后端都要使用URL加解密中文
return URLDecoder.decode(new String(decryptedData, StandardCharsets.UTF_8), StandardCharsets.UTF_8);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
AES
package com.bezkoder.szswzg.commons.utils;
import cn.hutool.crypto.SecureUtil;
import com.bezkoder.szswzg.commons.XStringUtils;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.stereotype.Component;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.Security;
/**
* @author QL
* @date 2023/02/02 002 23:34
*/
@Component
public class AesUtils {
// AES_128/CBC/PKCS7Padding
private static final String ALGORITHM = "AES/CBC/PKCS7Padding";
private static final String KEY = SecureUtil.md5("xmmkchy").substring(5, 21);
private static final String IV = SecureUtil.md5(KEY).substring(5, 21);
private static Cipher Encipher = getCipherByType(Cipher.ENCRYPT_MODE);
private static Cipher DeCipher = getCipherByType(Cipher.DECRYPT_MODE);
private static Cipher getCipherByType(int CipherType) {
try {
Cipher cipher = Cipher.getInstance(ALGORITHM,new BouncyCastleProvider());
SecretKey secretKey = new SecretKeySpec(KEY.getBytes(), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes());
// System.out.println("KEY:" + KEY + " IV:" + IV);
cipher.init(CipherType, secretKey, ivParameterSpec);
return cipher;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String Encrypt(String text) {
try {
if(XStringUtils.isNotEmpty(text)){
synchronized (Encipher) {
return Base64.encodeBase64String(Encipher.doFinal(text.getBytes(StandardCharsets.UTF_8)));
}
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String Decrypt(String text) {
try {
if(XStringUtils.isNotEmpty(text)){
synchronized (DeCipher){
return new String(DeCipher.doFinal(Base64.decodeBase64(text)), StandardCharsets.UTF_8);
}
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
@Component
静态单例注入
https://www.cnblogs.com/WriteOnce/p/14954460.html
java.lang.SecurityException: JCE cannot authenticate the provider BC
Caused by: java.util.jar.JarException: file:/C:/Program%20Files/Java/jdk1.8.0_20/jre/lib/ext/bcprov-jdk18on-1.71.1.jar is not signed by a trusted signer.
java.lang.SecurityException: JCE cannot authenticate the provider BC
但是因为bouncycastle包有签名 maven的解包操作导致了签名失效 从而无法再使用。而本地的jre环境也没有这个jar包 就导致了JCE无法验证。
%JAVA_HOME%\jre\lib\security\java.security
数字按需递增
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
复制 官网下载的 https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk18on/
https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk18on/1.71.1/bcprov-jdk18on-1.71.1.jar
到 %JAVA_HOME%\jre\lib\ext
http://openlayers.vip/examples/csdn/Openlayers-feature.html
https://openlayers.org/en/latest/apidoc/module-ol_format_WKB-WKB.html
jbntbhpk/findListByCondition
返回数据转 jbntbhpk/findByCondition
返回数据
//jbntbhpk/findListByCondition
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon",
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4527"
}
},
"coordinates": []
},
"properties": {
"gid": "3",
"objectid": "92",
"bsm": "92",
"ysdm": "200",
"bhpkbh": "0120001",
"bhpkmj": "7300000",
"jbntmj": "8100000",
"gdmj": "8100000",
"szfw": "北至溪流",
"zldjdm": "09",
"bhkssj": 1000,
"bhjssj": 1000,
"bz": null,
"shapeLeng": "45921993",
"shapeArea": "6405735",
"deleteKey": null,
"dzbspId": "2",
"wgId": "2"
}
}
],
"totalFeatures": 5,
"crs": {
"type": "name",
"properties": {
"name": "urn:ogc:def:crs:EPSG::4527"
}
}
}
//jbntbhpk/findByCondition
[
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon",
"coordinates": []
},
"properties": {
"gid": "3",
"objectid": "92",
"bsm": "92",
"ysdm": "200",
"bhpkbh": "0120001",
"bhpkmj": "7300000",
"jbntmj": "8100000",
"gdmj": "8100000",
"szfw": "北至溪流",
"zldjdm": "09",
"bhkssj": 1000,
"bhjssj": 1000,
"bz": null,
"shapeLeng": "45921993",
"shapeArea": "6405735",
"deleteKey": null,
"dzbspId": "2",
"wgId": "2"
}
}
]
//接口返回改造
run() {
axios.post("/api/jbntbhpk/findListByCondition", {
"bhpkbh": "",
"gid": "",
"x": "",
"y": "",
"geomStr": "",
"code": "",
"dzbspId": "",
"wgId": "3"
}).then(res => {
let data = res.data.data;
let featurelist = []
data.forEach(item => {
let geom = item.geom
delete item.geom
featurelist.push(this.HexWKB2GeoJson(geom, item))
})
// console.log(featurelist);
let datalist = {
"type": "FeatureCollection",
"features": featurelist,
"crs": {
"type": "name",
"properties": {
"name": "urn:ogc:def:crs:EPSG::4527"
}
},
"totalFeatures": featurelist.length,
}
console.log(JSON.stringify(datalist));
})
},
//hex的geom数据解成geojson
HexWKB2GeoJson(coordinate, properties) {
if (coordinate == null || coordinate == undefined || coordinate == '') {
return {}
}
// console.log(coordinate,properties)
// 读入hex_wkb
let featureTemp = new ol.format.WKB().readFeature(coordinate)
// wkb_feature转GeoJSON
let geoJSON = new ol.format.GeoJSON().writeFeature(featureTemp);
let geo_json = JSON.parse(geoJSON)
geo_json.properties = properties
console.log(geo_json);
return geo_json
}
//geojson到hex数据
GeoJson2HexWKB(geoJson) {
if (geoJson == null || geoJson == undefined || geoJson == '') {
return {}
}
// 读入geoJSON文本
let geoJSON = new ol.format.GeoJSON().readFeature(geoJson);
// 转为hex_wkb文本
let wkb = new ol.format.WKB({
hex: true,
ewkb: true
}).writeFeature(geoJSON)
return wkb
}
关闭 ESLint 格式化
//vue.config.js
module.exports = defineConfig({
lintOnSave: false,
})