fastjson的ParserConfig设置
时间: 2023-02-09 17:56:41 浏览: 2653
fastjson 的 ParserConfig 是用于解析 json 字符串的配置类。你可以使用它来设置解析过程中的各种参数,比如解析时是否忽略未知字段、是否支持注解、是否忽略 transient 字段等。
举个例子:
```
ParserConfig config = new ParserConfig();
config.setAsmEnable(false); // 禁用 asm 优化
config.setIgnoreNotMatch(true); // 忽略未知字段
String json = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
JSONObject object = (JSONObject) JSON.parse(json, config);
```
你还可以在全局设置中修改默认的 ParserConfig:
```
ParserConfig.getGlobalInstance().setAsmEnable(false);
```
有关 fastjson 的更多信息,你可以参考官方文档:https://github.com/alibaba/fastjson/wiki/Getting-Started 。
相关问题
详细介绍一下fastjson的ParserConfig,以及他的构造函数和属性方法
Fastjson的ParserConfig是用于解析JSON字符串的配置类,它提供了一些可以定制的属性和方法,可以满足不同场景下的需求。
构造函数:
```java
public ParserConfig(int featureValues, boolean fieldBased)
```
参数说明:
- `featureValues`:特性值,用于配置解析器的行为。
- `fieldBased`:是否基于字段解析。
属性方法:
- `public static ParserConfig getGlobalInstance()`:获取全局的ParserConfig实例。
- `public static ParserConfig getGlobalInstance(Feature... features)`:获取全局的ParserConfig实例,并设置解析器特性。
- `public static void setGlobalInstance(ParserConfig config)`:设置全局的ParserConfig实例。
- `public ParserConfig configFromAnnotations(Class<?> clazz)`:从类注解中获取配置信息。
- `public void addAccept(String... names)`:添加可以被解析的类名。
- `public void addDeny(String... names)`:添加不可以被解析的类名。
- `public boolean isAccept(String className)`:判断是否可以被解析。
- `public boolean isDeny(String className)`:判断是否不可以被解析。
- `public void setAutoTypeSupport(boolean autoTypeSupport)`:设置是否开启自动类型支持。
- `public boolean isAutoTypeSupport()`:判断是否开启自动类型支持。
- `public void setAsmEnable(boolean asmEnable)`:设置是否开启ASM字节码增强。
- `public boolean isAsmEnable()`:判断是否开启ASM字节码增强。
- `public void setSafeMode(boolean safeMode)`:设置是否开启安全模式。
- `public boolean isSafeMode()`:判断是否开启安全模式。
- `public void addParserFeatures(Feature... features)`:添加解析器特性。
- `public void config(DeserializationConfig config)`:配置反序列化配置。
- `public void setDeserializer(Class<?> clazz, ObjectDeserializer deserializer)`:设置指定类的反序列化器。
- `public void addDeserializer(Class<?> clazz, ObjectDeserializer deserializer)`:添加指定类的反序列化器。
- `public ObjectDeserializer getDeserializer(Class<?> clazz, Type type)`:获取指定类的反序列化器。
- `public FieldDeserializer createFieldDeserializer(ParserConfig mapping, Class<?> clazz, FieldInfo fieldInfo)`:创建指定字段的反序列化器。
- `public Map<String, FieldDeserializer> getFieldDeserializers(Class<?> clazz)`:获取指定类的所有字段反序列化器。
- `public void addFilter(Class<?> clazz, SerializeFilter filter)`:添加指定类的序列化过滤器。
- `public SerializeFilter getFilter(Class<?> clazz)`:获取指定类的序列化过滤器。
- `public void addFilter(String className, SerializeFilter filter)`:添加指定类名的序列化过滤器。
- `public SerializeFilter getFilter(String className)`:获取指定类名的序列化过滤器。
- `public void addResolveTask(ResolveTask task)`:添加解析任务。
- `public List<ResolveTask> getResolveTaskList()`:获取解析任务列表。
- `public void setResolveStatus(int status)`:设置解析状态。
- `public boolean isPrimitive(Class<?> clazz)`:判断指定类是否为基本类型。
- `public boolean isPrimitive2(Class<?> clazz)`:判断指定类是否为基本类型或字符串类型。
- `public void setTypeResolverAdapter(TypeResolverAdapter typeResolverAdapter)`:设置类型解析器适配器。
- `public TypeResolverAdapter getTypeResolverAdapter()`:获取类型解析器适配器。
fastjson 安全模式怎么设置
fastjson的安全模式可以通过以下几种方式进行设置。首先,可以在代码中配置`ParserConfig.getGlobalInstance().setSafeMode(true)`来开启安全模式。例如,在应用程序的入口处添加以下代码:
```java
public class DemoApplication {
public static void main(String\[\] args) {
ParserConfig.getGlobalInstance().setSafeMode(true);
SpringApplication.run(DemoApplication.class, args);
}
}
```
需要注意的是,如果使用`new ParserConfig`的方式,需要注意单例处理,否则可能会导致性能下降和内存泄漏。
另外一种方式是通过JVM启动参数来设置安全模式,可以在启动时加上`-Dfastjson.parser.safeMode=true`参数来开启安全模式。这样在应用程序运行时,fastjson会自动启用安全模式。
需要注意的是,安全模式的开启会完全禁用autoType功能,确保了fastjson在反序列化时不会受到恶意代码的攻击。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* *3* [Fastjson开启安全模式5种方法(VIP典藏版)](https://blog.csdn.net/libusi001/article/details/117710826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [fastjson 安全漏洞](https://blog.csdn.net/regrethh/article/details/107381977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文