当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Jpa 1.4.0-未找到能够从类型[java.util.HashMap]转换为类型Pojo的转换器

孙自怡
2023-03-14

我们有一个使用带有Postgres数据库的Spring boot1.3运行的应用程序。自定义用户类型是为数据库中的Json类型定义的。遵循并实现UserType以使用ObjectMapper返回Pojo。它工作得非常好。但是现在使用Spring boot1.4,我们得到了这个异常。

自定义用户类型中的代码片段。

@Override
    public Object nullSafeGet(ResultSet resultSet, String[] names, SessionImplementor sessionImplementor, Object owner) throws HibernateException, SQLException {
        final String result = resultSet.getString(names[0]);
        if(result == null) {
            return null;
        }
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            Object response = objectMapper.readValue(result.getBytes("UTF-8"), returnedClass());
            return response;
        } catch (Exception e) {
            throw new RuntimeException("Failed to process json request:"+e.getMessage(), e);
        }
    }

我可以看到,找到了来自数据库的响应,objectmapper也对其进行了转换。返回时抛出此错误。

组织。springframework。果心转换ConverterNotFoundException:未找到能够从类型[java.util.HashMap]转换为类型[com.company.component.entity.dto.CustomDataDto]的转换器

我们在Spring boot的WebAppConfiguration中配置了MappingJackson2HttpMessageConverter。

自定义数据到Pojo:

package com.company.component.entity.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import org.springframework.boot.jackson.JsonComponent;

import java.io.Serializable;
import java.util.List;

@JsonInclude(value = JsonInclude.Include.NON_EMPTY)
public class CustomDataDto implements Serializable {
    private static final long serialVersionUID = 4884047700260085799L;
    String id;
    List<MessagesDto> messages;
    List<CommentsDto> comments;
    List<MsgCmtMappingDto> msgCmtMapping;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public List<MessagesDto> getComments() {
        return comments;
    }

    public void setComments(List<MessagesDto> comments) {
        this.comments = comments;
    }

    public List<CommentsDto> getMessages() {
        return messages;
    }

    public void setMessages(List<CommentsDto> messages) {
        this.messages = messages;
    }

    public List<MsgCmtMappingDto> getMsgCmtMapping() {
        return msgCmtMapping;
    }

    public void setMsgCmtMapping(List<MsgCmtMappingDto> msgCmtMapping) {
        this.msgCmtMapping = msgCmtMapping;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof CustomDataDto)) return false;

        CustomDataDto that = (CustomDataDto) o;

        if (!id.equals(that.id)) return false;
        if (!messages.equals(that.messages)) return false;
        if (!comments.equals(that.comments)) return false;
        return msgCmtMapping.equals(that.msgCmtMapping);

    }

    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + messages.hashCode();
        result = 31 * result + comments.hashCode();
        result = 31 * result + msgCmtMapping.hashCode();
        return result;
    }
}

共有1个答案

徐隐水
2023-03-14

只需检查您的pojo类

您试图将字符串(来自数据库)显示为映射(pojo类中的字段)

 类似资料: