Skip to content

Commit bdce42c

Browse files
committed
1.2.26
1 parent 2539927 commit bdce42c

18 files changed

Lines changed: 1304 additions & 39 deletions

‎pom.xml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
-->
1212
<groupId>com.alibaba</groupId>
1313
<artifactId>fastjson</artifactId>
14-
<version>1.2.25</version>
14+
<version>1.2.26</version>
1515

1616
<packaging>jar</packaging>
1717
<name>fastjson</name>
@@ -386,7 +386,7 @@
386386
<dependency>
387387
<groupId>com.jsoniter</groupId>
388388
<artifactId>jsoniter</artifactId>
389-
<version>0.9.4</version>
389+
<version>0.9.8</version>
390390
<scope>test</scope>
391391
</dependency>
392392

‎src/main/java/com/alibaba/fastjson/JSON.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -964,5 +964,5 @@ public static <T> void handleResovleTask(DefaultJSONParser parser, T value) {
964964
parser.handleResovleTask(value);
965965
}
966966

967-
public final static String VERSION = "1.2.25";
967+
public final static String VERSION = "1.2.26";
968968
}

‎src/main/java/com/alibaba/fastjson/JSONPath.java‎

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ public boolean remove(Object rootObject) {
248248
}
249249

250250
public boolean set(Object rootObject, Object value) {
251+
return set(rootObject, value, true);
252+
}
253+
254+
public boolean set(Object rootObject, Object value, boolean p) {
251255
if (rootObject == null) {
252256
return false;
253257
}
@@ -273,13 +277,29 @@ public boolean set(Object rootObject, Object value) {
273277

274278
Object newObj = null;
275279
if (nextSegement instanceof PropertySegement) {
276-
Class<?> parentClass = parentObject.getClass();
277-
JavaBeanSerializer beanSerializer = getJavaBeanSerializer(parentClass);
278-
if (beanSerializer != null) {
279-
return false;
280+
JavaBeanDeserializer beanDeserializer = null;
281+
Class<?> fieldClass = null;
282+
if (segment instanceof PropertySegement) {
283+
String propertyName = ((PropertySegement) segment).propertyName;
284+
Class<?> parentClass = parentObject.getClass();
285+
JavaBeanDeserializer parentBeanDeserializer = getJavaBeanDeserializer(parentClass);
286+
if (parentBeanDeserializer != null) {
287+
FieldDeserializer fieldDeserializer = parentBeanDeserializer.getFieldDeserializer(propertyName);
288+
fieldClass = fieldDeserializer.fieldInfo.fieldClass;
289+
beanDeserializer = getJavaBeanDeserializer(fieldClass);
290+
}
280291
}
281292

282-
newObj = new JSONObject();
293+
if (beanDeserializer != null) {
294+
295+
if (beanDeserializer.beanInfo.defaultConstructor != null) {
296+
newObj = beanDeserializer.createInstance(null, fieldClass);
297+
} else {
298+
return false;
299+
}
300+
} else {
301+
newObj = new JSONObject();
302+
}
283303
} else if (nextSegement instanceof ArrayAccessSegement) {
284304
newObj = new JSONArray();
285305
}
@@ -2300,6 +2320,17 @@ protected JavaBeanSerializer getJavaBeanSerializer(final Class<?> currentClass)
23002320
return beanSerializer;
23012321
}
23022322

2323+
protected JavaBeanDeserializer getJavaBeanDeserializer(final Class<?> currentClass) {
2324+
JavaBeanDeserializer beanDeserializer = null;
2325+
{
2326+
ObjectDeserializer deserializer = parserConfig.getDeserializer(currentClass);
2327+
if (deserializer instanceof JavaBeanDeserializer) {
2328+
beanDeserializer = (JavaBeanDeserializer) deserializer;
2329+
}
2330+
}
2331+
return beanDeserializer;
2332+
}
2333+
23032334
@SuppressWarnings("rawtypes")
23042335
int evalSize(Object currentObject) {
23052336
if (currentObject == null) {

‎src/main/java/com/alibaba/fastjson/TypeReference.java‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.lang.reflect.ParameterizedType;
44
import java.lang.reflect.Type;
55
import java.lang.reflect.TypeVariable;
6+
import java.util.List;
67
import java.util.concurrent.ConcurrentHashMap;
78
import java.util.concurrent.ConcurrentMap;
89

@@ -82,4 +83,6 @@ protected TypeReference(Type... actualTypeArguments){
8283
public Type getType() {
8384
return type;
8485
}
86+
87+
public final static Type LIST_STRING = new TypeReference<List<String>>() {}.getType();
8588
}

‎src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java‎

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,7 @@
6464
import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer;
6565
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
6666
import com.alibaba.fastjson.parser.deserializer.ResolveFieldDeserializer;
67-
import com.alibaba.fastjson.serializer.BeanContext;
68-
import com.alibaba.fastjson.serializer.IntegerCodec;
69-
import com.alibaba.fastjson.serializer.LongCodec;
70-
import com.alibaba.fastjson.serializer.StringCodec;
67+
import com.alibaba.fastjson.serializer.*;
7168
import com.alibaba.fastjson.util.TypeUtils;
7269

7370
/**
@@ -102,29 +99,38 @@ public class DefaultJSONParser implements Closeable {
10299
private List<ExtraTypeProvider> extraTypeProviders = null;
103100
private List<ExtraProcessor> extraProcessors = null;
104101
protected FieldTypeResolver fieldTypeResolver = null;
105-
102+
103+
private boolean autoTypeEnable;
104+
private String[] autoTypeAccept = null;
105+
106106
protected transient BeanContext lastBeanContext;
107107

108108
static {
109-
primitiveClasses.add(boolean.class);
110-
primitiveClasses.add(byte.class);
111-
primitiveClasses.add(short.class);
112-
primitiveClasses.add(int.class);
113-
primitiveClasses.add(long.class);
114-
primitiveClasses.add(float.class);
115-
primitiveClasses.add(double.class);
116-
117-
primitiveClasses.add(Boolean.class);
118-
primitiveClasses.add(Byte.class);
119-
primitiveClasses.add(Short.class);
120-
primitiveClasses.add(Integer.class);
121-
primitiveClasses.add(Long.class);
122-
primitiveClasses.add(Float.class);
123-
primitiveClasses.add(Double.class);
124-
125-
primitiveClasses.add(BigInteger.class);
126-
primitiveClasses.add(BigDecimal.class);
127-
primitiveClasses.add(String.class);
109+
Class<?>[] classes = new Class[] {
110+
boolean.class,
111+
byte.class,
112+
short.class,
113+
int.class,
114+
long.class,
115+
float.class,
116+
double.class,
117+
118+
Boolean.class,
119+
Byte.class,
120+
Short.class,
121+
Integer.class,
122+
Long.class,
123+
Float.class,
124+
Double.class,
125+
126+
BigInteger.class,
127+
BigDecimal.class,
128+
String.class
129+
};
130+
131+
for (Class<?> clazz : classes) {
132+
primitiveClasses.add(clazz);
133+
}
128134
}
129135

130136
public String getDateFomartPattern() {
@@ -1501,5 +1507,9 @@ public void parseExtra(Object object, String key) {
15011507
process.processExtra(object, key, value);
15021508
}
15031509
}
1510+
1511+
if (resolveStatus == NeedToResolve) {
1512+
resolveStatus = NONE;
1513+
}
15041514
}
15051515
}

‎src/main/java/com/alibaba/fastjson/support/config/FastJsonConfig.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ public class FastJsonConfig {
6666
*/
6767
private String dateFormat;
6868

69+
protected boolean writeContentLength = true;
70+
6971
/**
7072
* init param.
7173
*/
@@ -201,4 +203,12 @@ public Charset getCharset() {
201203
public void setCharset(Charset charset) {
202204
this.charset = charset;
203205
}
206+
207+
public boolean isWriteContentLength() {
208+
return writeContentLength;
209+
}
210+
211+
public void setWriteContentLength(boolean writeContentLength) {
212+
this.writeContentLength = writeContentLength;
213+
}
204214
}

‎src/main/java/com/alibaba/fastjson/support/spring/FastJsonHttpMessageConverter.java‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,11 @@ protected void writeInternal(Object obj, HttpOutputMessage outputMessage)
156156
fastJsonConfig.getDateFormat(), //
157157
JSON.DEFAULT_GENERATE_FEATURE, //
158158
fastJsonConfig.getSerializerFeatures());
159-
headers.setContentLength(len);
159+
160+
if (fastJsonConfig.isWriteContentLength()) {
161+
headers.setContentLength(len);
162+
}
163+
160164
OutputStream out = outputMessage.getBody();
161165
outnew.writeTo(out);
162166
outnew.close();

‎src/main/java/com/alibaba/fastjson/support/spring/FastJsonHttpMessageConverter4.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
*/
2828
public class FastJsonHttpMessageConverter4 //
2929
extends AbstractGenericHttpMessageConverter<Object> {
30-
3130
/**
3231
* with fastJson config
3332
*/
@@ -86,7 +85,9 @@ protected void writeInternal(Object obj, //
8685
fastJsonConfig.getDateFormat(), //
8786
JSON.DEFAULT_GENERATE_FEATURE, //
8887
fastJsonConfig.getSerializerFeatures());
89-
headers.setContentLength(len);
88+
if (fastJsonConfig.isWriteContentLength()) {
89+
headers.setContentLength(len);
90+
}
9091
OutputStream out = outputMessage.getBody();
9192
outnew.writeTo(out);
9293
outnew.close();

‎src/main/java/com/alibaba/fastjson/support/spring/FastJsonpHttpMessageConverter4.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,9 @@ protected void writeInternal(Object obj, Type type, HttpOutputMessage outputMess
147147
JSON.DEFAULT_GENERATE_FEATURE, //
148148
fastJsonConfig.getSerializerFeatures());
149149
len += writeSuffix(outnew, obj);
150-
headers.setContentLength(len);
150+
if (fastJsonConfig.isWriteContentLength()) {
151+
headers.setContentLength(len);
152+
}
151153
OutputStream out = outputMessage.getBody();
152154
outnew.writeTo(out);
153155
outnew.close();

0 commit comments

Comments
 (0)