mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix code
This commit is contained in:
parent
072924c3a2
commit
cd048987a0
@ -12,8 +12,10 @@
|
|||||||
|
|
||||||
package org.dromara.hutool.json.engine;
|
package org.dromara.hutool.json.engine;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSONFactory;
|
||||||
|
import com.alibaba.fastjson2.JSONReader;
|
||||||
import com.alibaba.fastjson2.JSONWriter;
|
import com.alibaba.fastjson2.JSONWriter;
|
||||||
|
import com.alibaba.fastjson2.reader.ObjectReader;
|
||||||
import com.alibaba.fastjson2.writer.ObjectWriter;
|
import com.alibaba.fastjson2.writer.ObjectWriter;
|
||||||
|
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
@ -27,16 +29,27 @@ import java.lang.reflect.Type;
|
|||||||
* @since 6.0.0
|
* @since 6.0.0
|
||||||
*/
|
*/
|
||||||
public class FastJSON2Engine implements JSONEngine {
|
public class FastJSON2Engine implements JSONEngine {
|
||||||
|
|
||||||
|
private final JSONWriter.Context writerContext;
|
||||||
|
private final JSONReader.Context readerContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造
|
||||||
|
*/
|
||||||
|
public FastJSON2Engine() {
|
||||||
|
this.writerContext = JSONFactory.createWriteContext();
|
||||||
|
this.readerContext = JSONFactory.createReadContext();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serialize(final Object bean, final Writer writer) {
|
public void serialize(final Object bean, final Writer writer) {
|
||||||
final JSONWriter.Context context = new JSONWriter.Context();
|
try (final JSONWriter jsonWriter = JSONWriter.of(this.writerContext)) {
|
||||||
try (final JSONWriter jsonWriter = JSONWriter.ofUTF8(context)) {
|
|
||||||
if (bean == null) {
|
if (bean == null) {
|
||||||
jsonWriter.writeNull();
|
jsonWriter.writeNull();
|
||||||
} else {
|
} else {
|
||||||
jsonWriter.setRootObject(bean);
|
jsonWriter.setRootObject(bean);
|
||||||
final Class<?> valueClass = bean.getClass();
|
final Class<?> valueClass = bean.getClass();
|
||||||
final ObjectWriter<?> objectWriter = context.getObjectWriter(valueClass, valueClass);
|
final ObjectWriter<?> objectWriter = this.writerContext.getObjectWriter(valueClass, valueClass);
|
||||||
objectWriter.write(jsonWriter, bean, null, null, 0);
|
objectWriter.write(jsonWriter, bean, null, null, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,8 +57,19 @@ public class FastJSON2Engine implements JSONEngine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <T> T deserialize(final Reader reader, final Object type) {
|
public <T> T deserialize(final Reader reader, final Object type) {
|
||||||
return JSON.parseObject(reader, (Type) type);
|
final ObjectReader<T> objectReader = this.readerContext.getObjectReader((Type) type);
|
||||||
|
|
||||||
|
try (final JSONReader jsonReader = JSONReader.of(reader, this.readerContext)) {
|
||||||
|
if (jsonReader.isEnd()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final T object = objectReader.readObject(jsonReader, (Type) type, null, 0);
|
||||||
|
jsonReader.handleResolveTasks(object);
|
||||||
|
return object;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
package org.dromara.hutool.json.engine;
|
package org.dromara.hutool.json.engine;
|
||||||
|
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,4 +42,29 @@ public interface JSONEngine {
|
|||||||
* @return Java Bean(POJO)对象
|
* @return Java Bean(POJO)对象
|
||||||
*/
|
*/
|
||||||
<T> T deserialize(Reader reader, Object type);
|
<T> T deserialize(Reader reader, Object type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将Java Bean(POJO)对象转换为JSON字符串
|
||||||
|
*
|
||||||
|
* @param bean Java Bean(POJO)对象
|
||||||
|
* @return JSON字符串
|
||||||
|
*/
|
||||||
|
default String toJsonString(final Object bean) {
|
||||||
|
final StringWriter stringWriter = new StringWriter();
|
||||||
|
serialize(bean, stringWriter);
|
||||||
|
return stringWriter.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将JSON字符串转换为Java Bean(POJO)对象
|
||||||
|
*
|
||||||
|
* @param <T> Java Bean对象类型
|
||||||
|
* @param jsonStr JSON字符串
|
||||||
|
* @param type Java Bean(POJO)对象类型,可以为{@code Class<T>}或者TypeReference
|
||||||
|
* @return Java Bean(POJO)对象
|
||||||
|
*/
|
||||||
|
default <T> T fromJsonString(final String jsonStr, final Object type) {
|
||||||
|
final StringReader stringReader = new StringReader(jsonStr);
|
||||||
|
return deserialize(stringReader, type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,10 +12,12 @@
|
|||||||
|
|
||||||
package org.dromara.hutool.json.engine;
|
package org.dromara.hutool.json.engine;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonParser;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.JavaType;
|
import com.fasterxml.jackson.databind.JavaType;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import org.dromara.hutool.core.io.IORuntimeException;
|
import org.dromara.hutool.core.io.IORuntimeException;
|
||||||
|
import org.dromara.hutool.core.lang.wrapper.SimpleWrapper;
|
||||||
import org.dromara.hutool.json.JSONException;
|
import org.dromara.hutool.json.JSONException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -27,21 +29,21 @@ import java.io.Writer;
|
|||||||
*
|
*
|
||||||
* @author Looly
|
* @author Looly
|
||||||
*/
|
*/
|
||||||
public class JacksonEngine implements JSONEngine{
|
public class JacksonEngine extends SimpleWrapper<ObjectMapper> implements JSONEngine{
|
||||||
|
|
||||||
private final ObjectMapper mapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
*/
|
*/
|
||||||
public JacksonEngine() {
|
public JacksonEngine() {
|
||||||
this.mapper = new ObjectMapper();
|
super(new ObjectMapper());
|
||||||
|
// 允许出现单引号
|
||||||
|
raw.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serialize(final Object bean, final Writer writer) {
|
public void serialize(final Object bean, final Writer writer) {
|
||||||
try {
|
try {
|
||||||
mapper.writeValue(writer, bean);
|
raw.writeValue(writer, bean);
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
throw new IORuntimeException(e);
|
throw new IORuntimeException(e);
|
||||||
}
|
}
|
||||||
@ -52,11 +54,11 @@ public class JacksonEngine implements JSONEngine{
|
|||||||
public <T> T deserialize(final Reader reader, final Object type) {
|
public <T> T deserialize(final Reader reader, final Object type) {
|
||||||
try {
|
try {
|
||||||
if(type instanceof Class){
|
if(type instanceof Class){
|
||||||
return mapper.readValue(reader, (Class<T>)type);
|
return raw.readValue(reader, (Class<T>)type);
|
||||||
} else if(type instanceof TypeReference){
|
} else if(type instanceof TypeReference){
|
||||||
return mapper.readValue(reader, (TypeReference<T>)type);
|
return raw.readValue(reader, (TypeReference<T>)type);
|
||||||
} else if(type instanceof JavaType){
|
} else if(type instanceof JavaType){
|
||||||
return mapper.readValue(reader, (JavaType)type);
|
return raw.readValue(reader, (JavaType)type);
|
||||||
}
|
}
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
throw new IORuntimeException(e);
|
throw new IORuntimeException(e);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user