From 736e45baba97f85a090a4db27c27165eb7a65e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Tue, 17 May 2016 14:35:11 +0800 Subject: [PATCH] improved fluent setter method support --- .../alibaba/fastjson/parser/JavaBeanInfo.java | 2 +- .../alibaba/json/bvt/FluentSetterTest.java | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/json/bvt/FluentSetterTest.java diff --git a/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java b/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java index 9ad696ace..12e740c8b 100755 --- a/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java +++ b/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java @@ -377,7 +377,7 @@ class JavaBeanInfo { // support builder set Class returnType = method.getReturnType(); - if ((!(returnType == Void.TYPE || returnType == clazz)) // + if ((!(returnType == Void.TYPE || returnType == method.getDeclaringClass())) // || method.getParameterTypes().length != 1 // || method.getDeclaringClass() == Object.class // ) { diff --git a/src/test/java/com/alibaba/json/bvt/FluentSetterTest.java b/src/test/java/com/alibaba/json/bvt/FluentSetterTest.java new file mode 100644 index 000000000..59eb26f65 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/FluentSetterTest.java @@ -0,0 +1,52 @@ +package com.alibaba.json.bvt; + +import org.junit.Assert; + +import com.alibaba.fastjson.JSON; + +import junit.framework.TestCase; + +public class FluentSetterTest extends TestCase { + + public void test_fluent() throws Exception { + B b = new B(); + b.setId(1001); + b.setValue(1002); + + String text = JSON.toJSONString(b); + Assert.assertEquals("{\"id\":1001,\"value\":1002}", text); + + B b1 = JSON.parseObject(text, B.class); + Assert.assertEquals(b.getId(), b1.getId()); + Assert.assertEquals(b.getValue(), b1.getValue()); + } + + public static class A { + + private int id; + + public int getId() { + return id; + } + + public A setId(int id) { + this.id = id; + return this; + } + } + + public static class B extends A { + + private int value; + + public int getValue() { + return value; + } + + public B setValue(int value) { + this.value = value; + return this; + } + + } +}