Java Jackson序列化处理getter方法抛出异常

12 浏览
0 Comments

Java Jackson序列化处理getter方法抛出异常

我使用了一个外部库,它有一个方法:

public class CustomUserDetails implements UserDetails {
    private final User principal;
    private final Collection authorities;
    //构造函数,getter,setter
    @Override
    public String getPassword() {
        throw new UnsupportedOperationException("Not allowed");
    }
}

我有一个@RequestMapping,返回该对象的一个实例:

@RequestMapping(value = "/authorities", method = GET)
public ResponseEntity getAuthorities() {
    return new ResponseEntity<>(authenticatedUser.getAuthentication(), HttpStatus.OK); //getAuthentication返回CustomUserDetails的实例
}

我得到了`org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Not allowed`的错误。我该如何处理?忽略或者为这个属性设置一些默认值。

更新我无法在该类上添加@JsonIngore,因为这不是我的库,我无法访问它的源代码。

0
0 Comments

问题:Java Jackson序列化中getter方法抛出异常的处理方法

在使用Java Jackson进行对象序列化时,有时候会遇到getter方法抛出异常的情况。下面给出了一种解决方法:

你可以在getPassword()方法上加上JsonIgnore注解。这样告诉Jackon不要尝试对该字段进行序列化。

解决方法一:使用JsonIgnore注解

@JsonIgnore
public String getPassword(){
    //...
}

然而,这种方法只适用于可以修改类代码的情况。如果该类是第三方库的一部分,你没有访问其源代码的权限,那么就无法在该类上添加注解。

解决方法二:自定义克隆类

public class ClonedClass {
    private String password;
    public ClonedClass(String password) {
        this.password = password;
    }
    public String getPassword() {
        return password;
    }
    //...
}

你可以创建一个自定义的克隆类,将需要序列化的字段复制到该类中,并在该类中进行序列化操作。虽然这种方法效率可能不高,但是是一种有效的解决方法。

ClonedClass clonedObject = new ClonedClass(originalObject.getPassword());
// 对clonedObject进行序列化操作

以上是解决Java Jackson序列化中getter方法抛出异常的两种方法。第一种方法适用于可以修改类代码的情况,而第二种方法适用于无法修改类代码的情况。

0