如何将 List<String> 类型的数据转换为 JSON 格式的字符串并存储在数据库中?
作者:互联网
使用 AttributeConverter
处理 List<String>
- 创建
AttributeConverter
:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
@Converter(autoApply = true)
public class StringListConverter implements AttributeConverter<List<String>, String> {
private static final ObjectMapper objectMapper = new ObjectMapper();
@Override
public String convertToDatabaseColumn(List<String> stringList) {
if (stringList == null) {
return null;
}
try {
return objectMapper.writeValueAsString(stringList);
} catch (JsonProcessingException e) {
throw new RuntimeException("Failed to convert List<String> to JSON string", e);
}
}
@Override
public List<String> convertToEntityAttribute(String jsonString) {
if (jsonString == null) {
return null;
}
try {
return objectMapper.readValue(jsonString, new TypeReference<List<String>>() {});
} catch (IOException e) {
throw new RuntimeException("Failed to convert JSON string to List<String>", e);
}
}
}
Java
- 在实体类中使用转换器:
import javax.persistence.*;
import java.util.List;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Convert(converter = StringListConverter.class)
@Column(columnDefinition = "json") // 这里可以一些数据库支持JSON
private List<String> skills; // 使用 List<String> 类型的字段
// getter 和 setter
}
Java
说明
- 字符串转换:
convertToDatabaseColumn
方法将List<String>
转换为 JSON 字符串,以便存储在数据库中。 - 解析字符串:
convertToEntityAttribute
方法读取 JSON 字符串并将其解析为List<String>
。
注意事项
- 异常处理:在转换过程中,您可以选择更好的异常处理方式,例如自定义异常类。
- 依赖库:确保您有 Jackson 库的相关依赖,以便进行 JSON 的序列化和反序列化。
标签: 来源: