Java Jackson序列化处理getter方法抛出异常
Java Jackson序列化处理getter方法抛出异常
我使用了一个外部库,它有一个方法:
public class CustomUserDetails implements UserDetails { private final User principal; private final Collectionauthorities; //构造函数,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,因为这不是我的库,我无法访问它的源代码。
问题: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方法抛出异常的两种方法。第一种方法适用于可以修改类代码的情况,而第二种方法适用于无法修改类代码的情况。