美文网首页开发相关
fastonjson中遇到的问题

fastonjson中遇到的问题

作者: 我是光芒万丈 | 来源:发表于2019-07-24 16:23 被阅读0次

今天在使用fastjson时遇到一个诡异的问题,即对userDTO 对象进行一个json的转化却导致另一个entity User中getToken方法出现异常。

相关代码如下:

userDTO

public class UserDTO implements Serializable,DTO {

    @NotBlank(message = "用户名为空")

    private String name;

    @NotBlank(message = "密码为空")

    private String pass;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getPass() {

        return pass;

    }

    public void setPass(String pass) {

        this.pass = pass;

    }

    @Override

    public PO poIstance() {

      return (PO) new User();

    }

    public PO getPoIstance() {

        return (PO) new User();

    }

    public static void main(String[] args) {

        UserDTO userDto =new UserDTO();

        userDto.setName("tony");

        userDto.setPass("123");

        UserDTO userDto1 =new UserDTO();

        userDto1.setName("tom");

        userDto1.setPass("123");

        UserDTO [] userDtos = new  UserDTO[]{userDto,userDto1};

        System.out.println(JSON.toJSONString(userDtos));

    }

}

entity下的user

@Entity

@Component

public class User implements PO {

    @Id

    @GeneratedValue(strategy = GenerationType.AUTO)

    private Long id;

    public Long getId() {

        return id;

    }

    public void setId(Long id) {

        this.id = id;

    }

    @Column(unique = true)

    private String name;

    public String getPass() {

        return pass;

    }

    public void setPass(String pass) {

        this.pass = pass;

    }

    @Column

    private String pass;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getToken() {

        if (StringUtils.isEmpty(id)) {

            throw new BussinessException(ResponseCode.ID_EMPTY);

        }

        String token = JWT.create().withAudience(String.valueOf(id)).sign(Algorithm.HMAC512(pass)).toString();

        return token;

    }

}

结果:

Exception in thread "main" 502 用户ID为空!

at com.Boyang.entity.User.getToken(User.java:55)

at com.alibaba.fastjson.serializer.ASMSerializer_2_User.write(Unknown Source)

原因:

    fastjson生成的json中的字段除了field,如存在get开头的方法也会默认加进去;

经调试可以追踪到:

我们可以改写getPoIstance为

public PO getPoIstance() {

    return new PO() {

    };

}

由于此时不再执行new user(), 因此也不会再去获取getToken去获取poIstance中的token字段,因此,程序执行成功:

结果如下:

[{"name":"tony","pass":"123","poIstance":{}},{"name":"tom","pass":"123","poIstance":{}}]

相关文章

  • fastonjson中遇到的问题

    今天在使用fastjson时遇到一个诡异的问题,即对userDTO 对象进行一个json的转化却导致另一个enti...

  • PhotoKit中遇到的问题

    PhotoKit是iOS8出的一个新的照片库,用以取代AssetsLibrary 保存图片到相册 方式1:只能保存...

  • laravel中遇到的问题

    1、关于自定义验证规则 在自定义验证规则中,如果自定义验证规则的名称使用了驼峰结构,例:'oldpassword'...

  • python中遇到的问题

    1、建议代码风格 如果你在代码中混用制表符和空格,这种缩进错误会很常见。所以如果是用空格,就一直用空格缩进,不要使...

  • Git中遇到的问题

    问题简述:父文件夹与子文件夹跟踪的远程仓库地址不一致,导致的提交的问题 问题复现: 1.首先创建一个新的文件夹 2...

  • 销售中遇到的问题

    作为微商,在销售中不可避免地被问到各种各样的问题,那么,我们不但需要有强大的内心来对抗,更要掌握一些方法技巧来巧妙...

  • 开发中遇到的问题

    1.switch 开发遇到的问题: 在setChecked之前要先设置 setCheckChangedListen...

  • Pomodoro 中遇到的问题

    Q1:ng-app="PomodoroApp" ??http://www.runoob.com/angularjs...

  • 销售中遇到的问题

    1、要账问题,这是我现阶段遇到最最头痛的问题,没有之一,我列举个例子吧,(微信)老板,货款安排下,我们公司也要周转...

  • 销售中遇到的问题

    1.有效的客户数量不足,网上能找到的客户信息有限,不知道通过什么样的方式去开发新的客户 2.联系到的客户总说没需求...

网友评论

    本文标题:fastonjson中遇到的问题

    本文链接:https://www.haomeiwen.com/subject/vsoxrctx.html