[apache/dubbo]dubbo3处理boolean属性(默认值为true)时,服务端设置为false,但客户端拿到的是ture

2023-12-14 858 views
0
Environment
  • Dubbo version: 3.2.4
  • Operating System version: x86_64 Linux
  • Java version: openJDK 17
Steps to reproduce this issue
  1. service result类,包含4个boolean属性,两个默认值为true

    
    public class Foo implements Serializable {
    boolean success = true;
    boolean success1 = true;    
    boolean success2;
    boolean success3;
    String message;
    
    // getter,setter
    ...
2. DubboService将4个boolean属性全部设置为false,并返回

@DubboService public class TestServiceImpl implements TestService { @Override public Foo foo() { Foo c = new Foo(); c.setSuccess(false); c.setSuccess1(false); c.setSuccess2(false); c.setSuccess3(false); c.setMessage("success"); return c; } }

3. bug: 返回结果,默认值为true的属性,接口返回值为true,而不是service设置的false 

@DubboReference TestService testService;

@RequestMapping("/test")
public Foo test() {
    return testService.foo();
}

// result {"success":true,"success1":true,"success2":false,"success3":false,"message":"success"}



Pls. provide [GitHub address] to reproduce this issue.
sample code:
https://github.com/liyesa/dubbo-bug

### Expected Behavior

<!-- What do you expect from the above steps?-->
boolean值能正确返回

### Actual Behavior

<!-- What actually happens? -->
有初始值=true的boolean属性,client拿到的永远是false;
补充:
在doubbo admin执行,返回结果正常
在telnet执行,返回结果正常
设置preferSerialization为 hessian2,返回结果正确

If there is an exception, please attach the exception trace:

NONE  error log 

回答

4

试了一下确实有问题

3

JSON序列化的问题

6

那是JSONWriter.Feature.NotWriteDefaultValue的问题了? bugfix前建议怎么处理,preferSerialization改用hessian2吗?

7

只能等待修复

3

尝试了下,用包装类好像可以解决~

1

在Java中,boolean的默认值为false,fastjson的NotWriteDefaultValue中的"DefaultValue"意义为:只要boolean值为false,就认为其为默认值,不进行序列化;包装类的"DefaultValue"为null,所以就不会导致这个问题了。

0

包装类或者不设置默认值都能解决,但这个本身算一个巨大的问题。序列化前后不一样,要么dubbo去改要么fastjson那边去改

7

这个参数是 fastjson2 侧为了减低序列化包大小使用的,具体怎么修复还需要 @wenshao 看一下

0

感觉fastjson2现在还不太稳定呀

6

怎么能说是不太稳定呢,那是相当的不稳定。

0

序列化的配置去掉这个:

JSONWriter.Feature.NotWriteDefaultValue
7

这个是序列化时配置了JSONWriter.Feature.NotWriteDefaultValue,序列化时boolean的false值就不输出了,而反序列化时没有值,用到了类中的缺省值。

3

那现在这种对不上的不算问题? @AlbumenJ 是不是Dubbo这边要去掉这个配置?

3

经过测试,上述问题已经解决。

3

请问dubbo计划什么时间发布对应fastjson 2.0.39的版本? @AlbumenJ

2

预计下周或者后周发布