mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
fix code
This commit is contained in:
parent
072924c3a2
commit
cd048987a0
@ -12,8 +12,10 @@
|
||||
|
||||
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.reader.ObjectReader;
|
||||
import com.alibaba.fastjson2.writer.ObjectWriter;
|
||||
|
||||
import java.io.Reader;
|
||||
@ -27,16 +29,27 @@ import java.lang.reflect.Type;
|
||||
* @since 6.0.0
|
||||
*/
|
||||
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
|
||||
public void serialize(final Object bean, final Writer writer) {
|
||||
final JSONWriter.Context context = new JSONWriter.Context();
|
||||
try (final JSONWriter jsonWriter = JSONWriter.ofUTF8(context)) {
|
||||
try (final JSONWriter jsonWriter = JSONWriter.of(this.writerContext)) {
|
||||
if (bean == null) {
|
||||
jsonWriter.writeNull();
|
||||
} else {
|
||||
jsonWriter.setRootObject(bean);
|
||||
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);
|
||||
}
|
||||
|
||||
@ -44,8 +57,19 @@ public class FastJSON2Engine implements JSONEngine {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
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;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
|
||||
/**
|
||||
@ -40,4 +42,29 @@ public interface JSONEngine {
|
||||
* @return Java Bean(POJO)对象
|
||||
*/
|
||||
<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;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.JavaType;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.dromara.hutool.core.io.IORuntimeException;
|
||||
import org.dromara.hutool.core.lang.wrapper.SimpleWrapper;
|
||||
import org.dromara.hutool.json.JSONException;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -27,21 +29,21 @@ import java.io.Writer;
|
||||
*
|
||||
* @author Looly
|
||||
*/
|
||||
public class JacksonEngine implements JSONEngine{
|
||||
|
||||
private final ObjectMapper mapper;
|
||||
public class JacksonEngine extends SimpleWrapper<ObjectMapper> implements JSONEngine{
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*/
|
||||
public JacksonEngine() {
|
||||
this.mapper = new ObjectMapper();
|
||||
super(new ObjectMapper());
|
||||
// 允许出现单引号
|
||||
raw.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(final Object bean, final Writer writer) {
|
||||
try {
|
||||
mapper.writeValue(writer, bean);
|
||||
raw.writeValue(writer, bean);
|
||||
} catch (final IOException e) {
|
||||
throw new IORuntimeException(e);
|
||||
}
|
||||
@ -52,11 +54,11 @@ public class JacksonEngine implements JSONEngine{
|
||||
public <T> T deserialize(final Reader reader, final Object type) {
|
||||
try {
|
||||
if(type instanceof Class){
|
||||
return mapper.readValue(reader, (Class<T>)type);
|
||||
return raw.readValue(reader, (Class<T>)type);
|
||||
} else if(type instanceof TypeReference){
|
||||
return mapper.readValue(reader, (TypeReference<T>)type);
|
||||
return raw.readValue(reader, (TypeReference<T>)type);
|
||||
} else if(type instanceof JavaType){
|
||||
return mapper.readValue(reader, (JavaType)type);
|
||||
return raw.readValue(reader, (JavaType)type);
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
throw new IORuntimeException(e);
|
||||
|
Loading…
x
Reference in New Issue
Block a user