我在物件中有一個JSONArray
欄位:
@Column(name = "_history", columnDefinition = "JSON") @Convert(converter = JSONArrayConverter.class) private JSONArray history;
這是JSONArrayConverter
的程式碼:
@JsonSerialize @Converter(autoApply = true) public class JSONArrayConverter implements AttributeConverter<JSONArray, String> { public static final Logger LOGGER = LoggerFactory.getLogger(JSONObjectConverter.class); @Override public String convertToDatabaseColumn(JSONArray array) { LOGGER.debug(array.toString()); if (array == null) return new JSONArray().toString(); String data = null; try { data = array.toString(); } catch (final Exception e) { LOGGER.error("JSON writing error", e); } return data; } @Override public JSONArray convertToEntityAttribute(String data) { if (_EMPTY.equals(data) || data == null || "[]".equals(data)) return new JSONArray(); JSONArray array = null; try { array = new JSONArray(data); } catch (final Exception e) { LOGGER.error("JSON reading error", e); } return array; } }
問題是當從MySQL資料庫請求物件時(history是JSON列並且有資料),Spring Boot將其傳回為空:
"history": {}
P粉4968866462023-09-13 10:53:10
最後,我解決了這個問題。
<dependency> <groupId>io.hypersistence</groupId> <artifactId>hypersistence-utils-hibernate-60</artifactId> <version>3.4.3</version> </dependency>
首先,將上述儲存庫加入到pom.xml
中。然後將程式碼更改為以下內容:
@Column(name = "_history", columnDefinition = "json") @Type(JsonType.class) private List<Map<String, Object>> history = new ArrayList<>();
然後一切都正常工作。