Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串映射到db到java类_Java_Jackson_Objectmapper - Fatal编程技术网

将字符串映射到db到java类

将字符串映射到db到java类,java,jackson,objectmapper,Java,Jackson,Objectmapper,我有一个实体类(account),其中有一个名为permission的列,用于管理对我网站的访问。它在my db中映射为字符串,如下所示: @Column(length = 300) private String permissions; 实际上,此字段包含一个json字符串,例如: {"permissionOne" : true, "permissionTwo" : false} 该字段未映射为JSON,因为我的db是MySql,版本较旧,不支持JSON类型,并且我无法更改版本 我还有一个

我有一个实体类(account),其中有一个名为permission的列,用于管理对我网站的访问。它在my db中映射为字符串,如下所示:

@Column(length = 300)
private String permissions;
实际上,此字段包含一个json字符串,例如:

{"permissionOne" : true, "permissionTwo" : false}
该字段未映射为JSON,因为我的db是MySql,版本较旧,不支持JSON类型,并且我无法更改版本

我还有一个JsonHelper类:

public class JsonHelper {

    /** Singleton parser instance */
    private static ObjectMapper parser = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
            .enable(Feature.ALLOW_UNQUOTED_FIELD_NAMES, Feature.ALLOW_UNQUOTED_CONTROL_CHARS);

    /** Logger instance */
    private static Logger LOG = LoggerFactory.getLogger(JsonHelper.class);

    /**
     * converts one java object into json {@link String}g
     *
     * @param toConvert
     * @return converted {@link String} object
     */
    public static String toJsonString(Object toConvert) {

        String result = null;
        try {
            result = parser.writeValueAsString(toConvert);
        }
        catch (JsonProcessingException e) {
            LOG.error("Cannot parse value : " + toConvert + " StackTrace : ", e);

        }

        return result;
    }

    /**
     * Converts one json {@link String} into java object
     *
     * @param toConvert json string to convert
     * @param convertType class type to be converted into
     * @return converted java object
     */
    public static <T> T fromJsonString(String toConvert, Class<T> convertType) {

        if (toConvert == null) return null;

        T result = null;

        try {
            result = parser.readValue(toConvert, convertType);
        }
        catch (IOException e) {
            LOG.error("Cannot parse value : " + convertType + " " + toConvert + " StackTrace : ", e);

        }

        return result;
    }

    /**
     * Converts one java object to {@link JsonNode}
     *
     * @param toConvert object to convert
     * @return converted json object
     */
    public static JsonNode toJsonNode(Object toConvert) {

        return parser.valueToTree(toConvert);

    }

    /**
     * Converts one {@link JsonNode} into java object
     *
     * @param toConvert to be converted
     * @param convertType type of class to convert to
     * @return converted java object
     */
    public static <T> T fromJsonNode(JsonNode toConvert, Class<T> convertType) {

        T result = null;

        try {
            result = parser.treeToValue(toConvert, convertType);
        }
        catch (JsonProcessingException e) {
            LOG.error("Cannot parse value : " + convertType + " " + toConvert + 
    " StackTrace : ", e);
        }

        return result;

    }

    /**
     * Converts one json into list of objects
     *
     * @param toConvert json to convert
     * @param convertType list type
     * @return converted liist with objects
     */
    public static <T> List<T> fromJsonNodeList(JsonNode toConvert, Class<T> 
    convertType) {

        List<T> result = new ArrayList<>();
        if (!toConvert.isArray()) return result;

        for (JsonNode node : toConvert) {
            result.add(fromJsonNode(node, convertType));
        }

        return result;
    }

    public static ObjectMapper getParser() {
        return parser;
    }

}
权限变量为空

我不知道为什么。看起来一切都很好。 我错过什么了吗

我可以用另一种方式吗?
谢谢

从我在这段代码中看到的判断:

public static <T> T fromJsonString(String toConvert, Class<T> convertType) {

    if (toConvert == null) return null;

    T result = null;

    try {
        result = parser.readValue(toConvert, convertType);
    }
    catch (IOException e) {
        LOG.error("Cannot parse value : " + convertType + " " + toConvert + " StackTrace : ", e);

    }

    return result;
}
publicstatict fromJsonString(String-to-convert,Class-convertType){
if(toConvert==null)返回null;
T结果=null;
试一试{
结果=parser.readValue(toConvert,convertType);
}
捕获(IOE异常){
LOG.error(“无法分析值:“+convertType+”+toConvert+”StackTrace:”,e);
}
返回结果;
}
如果
toConvert
null
或者解析器无法读取值,则此方法只能返回
null

如果
toConvert
null
是可接受的选项(假设
permissions
字段确实是可选的)。您可能应该记录一条警告,提示
toConvert
参数为空。除此之外,您可以在这里使用Java8作为返回值


在另一种情况下,您的数据库中可能存在一些垃圾(不可读的JSON),这将需要除日志记录之外的一些清理操作。您应该尽量避免存储中的数据会持续导致错误。

从我在这段代码中看到的情况来看:

public static <T> T fromJsonString(String toConvert, Class<T> convertType) {

    if (toConvert == null) return null;

    T result = null;

    try {
        result = parser.readValue(toConvert, convertType);
    }
    catch (IOException e) {
        LOG.error("Cannot parse value : " + convertType + " " + toConvert + " StackTrace : ", e);

    }

    return result;
}
publicstatict fromJsonString(String-to-convert,Class-convertType){
if(toConvert==null)返回null;
T结果=null;
试一试{
结果=parser.readValue(toConvert,convertType);
}
捕获(IOE异常){
LOG.error(“无法分析值:“+convertType+”+toConvert+”StackTrace:”,e);
}
返回结果;
}
如果
toConvert
null
或者解析器无法读取值,则此方法只能返回
null

如果
toConvert
null
是可接受的选项(假设
permissions
字段确实是可选的)。您可能应该记录一条警告,提示
toConvert
参数为空。除此之外,您可以在这里使用Java8作为返回值


在另一种情况下,您的数据库中可能存在一些垃圾(不可读的JSON),这将需要除日志记录之外的一些清理操作。您应该尽量避免存储中的数据会持续导致错误。

toConvert不为空。在DB中,字符串是一个有效的JSON:{“accessAllVisits”:true,“accessAllDocuments”:false}@Gjord83:那么您应该在日志中看到一条消息,对吗?@Gjord83:如果
toConvert
null
使用
对象。requireNonNull(toConvert,“toConvert不应为null”)并查看,如果引发该异常?toConvert不为null。在DB中,字符串是一个有效的JSON:{“accessAllVisits”:true,“accessAllDocuments”:false}@Gjord83:那么您应该在日志中看到一条消息,对吗?@Gjord83:如果
toConvert
null
使用
对象。requireNonNull(toConvert,“toConvert不应为null”)并查看是否引发了该异常?