Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Fastjson
Commits
edce5a4c
Commit
edce5a4c
authored
6 years ago
by
shaojin.wensj
Browse files
Options
Download
Email Patches
Plain Diff
support module spi
parent
c3a82326
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
+14
-0
src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java
+15
-0
...java/com/alibaba/fastjson/serializer/SerializeConfig.java
src/main/java/com/alibaba/fastjson/spi/Module.java
+11
-0
src/main/java/com/alibaba/fastjson/spi/Module.java
src/test/java/com/alibaba/json/bvt/ModuleTest.java
+57
-0
src/test/java/com/alibaba/json/bvt/ModuleTest.java
with
97 additions
and
0 deletions
+97
-0
src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
+
14
-
0
View file @
edce5a4c
...
...
@@ -48,6 +48,7 @@ import com.alibaba.fastjson.asm.ClassReader;
import
com.alibaba.fastjson.asm.TypeCollector
;
import
com.alibaba.fastjson.parser.deserializer.*
;
import
com.alibaba.fastjson.serializer.*
;
import
com.alibaba.fastjson.spi.Module
;
import
com.alibaba.fastjson.util.*
;
import
com.alibaba.fastjson.util.IdentityHashMap
;
import
com.alibaba.fastjson.util.ServiceLoader
;
...
...
@@ -118,6 +119,7 @@ public class ParserConfig {
private
boolean
jacksonCompatible
=
false
;
public
boolean
compatibleWithJavaBean
=
TypeUtils
.
compatibleWithJavaBean
;
private
List
<
Module
>
modules
=
new
ArrayList
<
Module
>();
{
denyHashCodes
=
new
long
[]{
...
...
@@ -448,6 +450,14 @@ public class ParserConfig {
return
derializer
;
}
for
(
Module
module
:
modules
)
{
derializer
=
module
.
createDeserializer
(
this
,
clazz
);
if
(
derializer
!=
null
)
{
putDeserializer
(
type
,
derializer
);
return
derializer
;
}
}
String
className
=
clazz
.
getName
();
className
=
className
.
replace
(
'$'
,
'.'
);
...
...
@@ -1193,4 +1203,8 @@ public class ParserConfig {
public
void
register
(
String
typeName
,
Class
type
)
{
typeMapping
.
putIfAbsent
(
typeName
,
type
);
}
public
void
register
(
Module
module
)
{
this
.
modules
.
add
(
module
);
}
}
This diff is collapsed.
Click to expand it.
src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java
+
15
-
0
View file @
edce5a4c
...
...
@@ -20,6 +20,7 @@ import com.alibaba.fastjson.annotation.JSONField;
import
com.alibaba.fastjson.annotation.JSONType
;
import
com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec
;
import
com.alibaba.fastjson.parser.deserializer.OptionalCodec
;
import
com.alibaba.fastjson.spi.Module
;
import
com.alibaba.fastjson.support.springfox.SwaggerJsonSerializer
;
import
com.alibaba.fastjson.util.*
;
import
com.alibaba.fastjson.util.IdentityHashMap
;
...
...
@@ -73,6 +74,8 @@ public class SerializeConfig {
4165360493669296979L
,
4446674157046724083L
};
private
List
<
Module
>
modules
=
new
ArrayList
<
Module
>();
public
String
getTypeKey
()
{
return
typeKey
;
...
...
@@ -471,6 +474,14 @@ public class SerializeConfig {
writer
=
serializers
.
get
(
clazz
);
}
}
for
(
Module
module
:
modules
)
{
writer
=
module
.
createSerializer
(
this
,
clazz
);
if
(
writer
!=
null
)
{
serializers
.
put
(
clazz
,
writer
);
return
writer
;
}
}
if
(
writer
==
null
)
{
String
className
=
clazz
.
getName
();
...
...
@@ -802,4 +813,8 @@ public class SerializeConfig {
this
.
serializers
.
clear
();
this
.
initSerializers
();
}
public
void
register
(
Module
module
)
{
this
.
modules
.
add
(
module
);
}
}
This diff is collapsed.
Click to expand it.
src/main/java/com/alibaba/fastjson/spi/Module.java
0 → 100644
+
11
-
0
View file @
edce5a4c
package
com.alibaba.fastjson.spi
;
import
com.alibaba.fastjson.parser.ParserConfig
;
import
com.alibaba.fastjson.parser.deserializer.ObjectDeserializer
;
import
com.alibaba.fastjson.serializer.ObjectSerializer
;
import
com.alibaba.fastjson.serializer.SerializeConfig
;
public
interface
Module
{
ObjectDeserializer
createDeserializer
(
ParserConfig
config
,
Class
type
);
ObjectSerializer
createSerializer
(
SerializeConfig
config
,
Class
type
);
}
This diff is collapsed.
Click to expand it.
src/test/java/com/alibaba/json/bvt/ModuleTest.java
0 → 100644
+
57
-
0
View file @
edce5a4c
package
com.alibaba.json.bvt
;
import
com.alibaba.fastjson.parser.ParserConfig
;
import
com.alibaba.fastjson.parser.deserializer.ObjectDeserializer
;
import
com.alibaba.fastjson.serializer.MiscCodec
;
import
com.alibaba.fastjson.serializer.ObjectSerializer
;
import
com.alibaba.fastjson.serializer.SerializeConfig
;
import
com.alibaba.fastjson.spi.Module
;
import
junit.framework.TestCase
;
public
class
ModuleTest
extends
TestCase
{
public
void
test_for_module
()
throws
Exception
{
ParserConfig
config
=
new
ParserConfig
();
config
.
register
(
new
MyModuel2
());
config
.
register
(
new
MyModuel
());
assertSame
(
MiscCodec
.
instance
,
config
.
getDeserializer
(
A
.
class
));
}
public
void
test_for_module_1
()
throws
Exception
{
SerializeConfig
config
=
new
SerializeConfig
();
config
.
register
(
new
MyModuel2
());
config
.
register
(
new
MyModuel
());
assertSame
(
MiscCodec
.
instance
,
config
.
getObjectWriter
(
A
.
class
));
}
public
static
class
A
{
}
public
static
class
MyModuel
implements
Module
{
@Override
public
ObjectDeserializer
createDeserializer
(
ParserConfig
config
,
Class
type
)
{
return
MiscCodec
.
instance
;
}
@Override
public
ObjectSerializer
createSerializer
(
SerializeConfig
config
,
Class
type
)
{
return
MiscCodec
.
instance
;
}
}
public
static
class
MyModuel2
implements
Module
{
@Override
public
ObjectDeserializer
createDeserializer
(
ParserConfig
config
,
Class
type
)
{
return
null
;
}
@Override
public
ObjectSerializer
createSerializer
(
SerializeConfig
config
,
Class
type
)
{
return
null
;
}
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment