5 hibernate jsonserializer jackson json-deserialization
这是我的项目的实体类
导入 java.util.Iterator;
导入 java.util.Map;
导入 java.util.Set;
@实体
@Table(名称=“培训”)
公开课培训{
@ID
@GeneratedValue
私人长ID;
私人字符串主题;
@OneToMany(mappedBy="训练")
私人设置会话 = 新 HashSet();
公共培训(){
}
公共培训(字符串主题,过渡级别级别,设置会话){
this.topic = 主题;
this.level = 级别;
this.sessions = 会话;
}
公共长 getId() {
返回标识;
}
公共无效 setId(长 ID){
this.id = id;
}
公共字符串 getTopic() {
返回主题;
}
公共无效设置主题(字符串主题){
this.topic = 主题;
}
公共设置 getSessions() {
返回会话;
}
公共无效setSessions(设置会话){
this.sessions = 会话;
}
}
这是会话表
@实体
@Table(名称=“会话”)
公共课会话{
@ID
@GeneratedValue
私人长ID;
私人字符串位置;
@ManyToOne
@JoinColumn(name="training_id")
@JsonIgnore
私人培训培训;
私人日期开始;
私人日期结束;
@JoinTable(name="session_user",
joinColumns = @JoinColumn(name="session_id"),
inverseJoinColumns = @JoinColumn(name="trainingRole_id"))
@MapKeyJoinColumn(name="user_id")
@元素集合
@JsonIgnore
private Map<User, TrainingRole> users = new HashMap<User, TrainingRole>();
公共长 getId() {
返回标识;
}
公共无效 setId(长 ID){
this.id = id;
}
公共字符串 getLocation() {
返回地点;
}
公共无效设置位置(字符串位置){
this.location = 位置;
}
公共训练 getTraining() {
回归训练;
}
public void setTraining(Training training) {
this.training = 训练;
}
公共日期 getStart() {
返回开始;
}
公共无效设置开始(日期开始){
this.start = 开始;
}
公共日期 getEnd() {
返回结束;
}
公共无效设置结束(日期结束){
this.end = 结束;
}
公共地图 <User, TrainingRole> getUsers() {
回访用户;
}
public void setUsers(Map<User, TrainingRole> users) {
this.users = 用户;
}
}
这是用户实体
@实体
@表(名称=“用户”)
公共类用户{
@ID
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
私人长ID;
@Column(name="csl",unique=true)
私人字符串 csl;
@Column(名称=“全名”)
私人字符串全名;
@Column(name="email")
私人字符串电子邮件;
公共用户(){
}
公共长 getId() {
返回标识;
}
公共无效 setId(长 ID){
this.id = id;
}
公共字符串 getEmail() {
回邮件;
}
公共无效setEmail(字符串电子邮件){
this.email = 电子邮件;
}
公共字符串 getCsl() {
返回 csl;
}
公共无效 setCsl(字符串 csl){
this.csl = csl;
}
公共字符串 getFullName() {
返回全名;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
}
我正在使用 JPARepository 在我的 mysql 数据库中保存训练和会话对象
但是每当我保存训练对象或会话对象时
我收到错误
cjMappingJackson2HttpMessageConverter:无法评估类型[简单类型,类会话]的Jackson反序列化:com.fasterxml.jackson.databind.JsonMappingException:找不到类型[简单类型,类用户]的(映射)键反序列化器
我用谷歌搜索,发现我需要手动序列化和反序列化..但我不知道该怎么做..请帮我..
小智 3
要使用您自己的类作为映射的键,您需要一个序列化器和反序列化器,就像您指出的那样。就像是:
public class CustomKeyDeserializer extends KeyDeserializer {
private static ObjectMapper mapper = new ObjectMapper();
@Override
public Object deserializeKey(String key, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return mapper.readValue(key, User.class);
}
}
public class CustomKeySerializer extends JsonSerializer<User> {
private static ObjectMapper mapper = new ObjectMapper();
@Override
public void serialize(User value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
gen.writeFieldName(mapper.writeValueAsString(value));
}
}
Run Code Online (Sandbox Code Playgroud)
并对字段进行注释
@JsonDeserialize(keyUsing = CustomKeyDeserializer.class)
@JsonSerialize(keyUsing = CustomKeySerializer.class)
private Map<User, TrainingRole> users = new HashMap<User, TrainingRole>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2384 次 |
| 最近记录: |