我有以下设置:
public class ValidationUtils {
public static class ValidationResults {
public List validationErrors;
public boolean valid;
public ValidationResults(){
validationErrors = new ArrayList();
valid = true;
}
@Override
public String toString() {
return "ValidationResults [validationErrors=" + validationErrors
+ ", valid=" + valid + "]";
}
}
// some static methods that create instances of ValidationResults.
}
ValidationResults类序列化后,我收到以下错误:
com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class play.data.validation.ValidationError and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: utils.ValidationResults["validationErrors"]->java.util.ArrayList[0])
我使用play.libs.Json实用程序类,它只是Jackson对象映射器的包装器。有人知道问题是什么吗?我如何解决这个问题?
ValidationError类的结构如下:
package play.data.validation;
import java.util.*;
import com.google.common.collect.ImmutableList;
/**
* A form validation error.
*/
public class ValidationError {
private String key;
private String message;
private List arguments;
/**
* Constructs a new ValidationError
.
*
* @param key the error key
* @param message the error message
*/
public ValidationError(String key, String message) {
this(key, message, ImmutableList.of());
}
/**
* Constructs a new ValidationError
.
*
* @param key the error key
* @param message the error message
* @param arguments the error message arguments
*/
public ValidationError(String key, String message, List arguments) {
this.key = key;
this.message = message;
this.arguments = arguments;
}
/**
* Returns the error key.
*/
public String key() {
return key;
}
/**
* Returns the error message.
*/
public String message() {
return message;
}
/**
* Returns the error arguments.
*/
public List arguments() {
return arguments;
}
public String toString() {
return "ValidationError(" + key + "," + message + "," + arguments + ")";
}
}
ValidationError的字段访问器方法既不遵循JavaBean约定,也不使用@JsonProperty注释进行注释,因此Jackson无法识别它们。
下面是一个使用更新的方法名稍微修改的类的工作示例:
public class JacksonGetters {
public static class ValidationError {
private String key;
private String message;
private List arguments;
/**
* Constructs a new ValidationError.
*
* @param key the error key
* @param message the error message
*/
public ValidationError(String key, String message) {
this(key, message, null);
}
/**
* Constructs a new ValidationError.
*
* @param key the error key
* @param message the error message
* @param arguments the error message arguments
*/
public ValidationError(String key, String message, List arguments) {
this.key = key;
this.message = message;
this.arguments = arguments;
}
/**
* Returns the error key.
*/
public String getKey() {
return key;
}
/**
* Returns the error message.
*/
public String getMessage() {
return message;
}
/**
* Returns the error arguments.
*/
public List getArguments() {
return arguments;
}
public String toString() {
return "ValidationError(" + key + "," + message + "," + arguments + ")";
}
}
public static void main(String[] args) throws JsonProcessingException {
ValidationError err = new ValidationError("key", "message");
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(err));
}
}
输出:
{
"key" : "key",
"message" : "message",
"arguments" : null
}
问题内容: 经过数小时的搜索,我终于意识到java.sql.ResultSet无法序列化,也没有办法。我尝试添加到列表中,作为Serializable对象和其他内容中的实例变量,但事实证明这只是幼稚而绝望的尝试。我试图使用的实现的RowSet像对CachedRowSetImpl是序列化,但它们增加了响应时间,最有可能是因为他们迭代ResultSet中。最重要的是,除非选择迭代ResultSet,否
除非缓存放入是内部的,否则此代码路径中不会发生缓存放入。我提到这一点是因为另一篇文章的评论,即“未知对”可能是由错误类型的缓存放置造成的。 我正专注于 未能反序列化对象[typename=org.apache.ignite.internal.processors.closure.gridclosureprocessor$C2]
问题内容: 如下代码: 引发以下异常: 我猜内部类具有一个允许对其私有访问的字段和方法的字段。声明内部类static 可以解决它,但是如果需要此访问权限怎么办?有没有一种方法可以在不包含封闭类的情况下序列化非静态内部类,例如通过引用外部类? 编辑:例如,仅在序列化之前才需要访问外部类。好的,编译器不知道这一点,但是我认为这就是关键字存在的原因。 问题答案: 如果InnerClass需要此访问权限怎
我试图在Java中序列化,但在运行我的程序时,我收到一个。 查看类,我注意到它没有实现。 为什么不实现?
问题内容: 我试图序列化和反序列化内部对象的数组列表: HairList对象也是一个可序列化的对象。 此代码执行返回以下错误: 排队 我不知道我在做什么错。你能给个小费吗? 更新: 解决: 仅使用HairBirt的本机数组而不是ArrayList即可工作: 代替 感谢大家的帮助。 问题答案: 不要使用-而是使用二进制数据并对它进行base64编码,以将其转换为字符串而不会丢失信息。 我强烈怀疑这是
本文向大家介绍什么是序列化与反序列化?相关面试题,主要包含被问及什么是序列化与反序列化?时的应答技巧和注意事项,需要的朋友参考一下 序列化:将对象状态转换为可保持或传输的格式的过程。将对象实例的字段及类的名称转换成字节流,然后把字节流写入数据流 反序列化:将流转换为对象。 这两个过程结合起来,可以轻松地存储和传输数据。