【发布时间】:2023-03-18 02:25:02
【问题描述】:
如何使用 POST 请求将原始 Json 保存为 MsSql 数据库中的字符串 - 使用 Jackson ObjectMapper 将字符串转换为 Json 但无法将原始 json 更改为字符串?
{
"id": 1,
"someName":"someName",
"json": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossTerm": "Standard Generalized Markup Language"
}
},
"anotherjson":{
"name":"someone",
"age": 121
},
"somedate":"03-11-2019.00:00:00"
}
如何将此保存的 json 保存为数据库中的整数、varchar、字符串、字符串、日期列? 1,someName, "{"title": "示例词汇表","GlossDiv": {"title": "S","GlossTerm": "标准通用标记语言"}","{"name":"someone" "年龄": 121}", 03-11-2019.00:00:00.
** 更新 ** 为简单起见,这里是简单的 json
{
"id":1,
"jsonObjectHolder":{
"name": "Name",
"age" : 404
}}
控制器:
@PostMapping("/postJson")
public void postJson(@RequestBody TryJson tryJson) {
tryJsonService.postJson(tryJson);
}
服务:
public void postJson(TryJson tryJson) {
tryJsonRepository.save(tryJson);
}
回购:
public interface TryJsonRepository extends CrudRepository<TryJson, Integer> {
}
型号:
@Entity
@Table(name = "TryJson") 公共类 TryJson {
@Id
@Column(name = "id")
private Integer id;
@JsonIgnore
@Column(name = "json_column")
private String jsonColumn;
@Transient
private JsonNode jsonObjectHolder;
public TryJson() {
}
public TryJson(Integer id, String jsonColumn) {
this.id = id;
this.jsonColumn = jsonColumn;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public JsonNode getJsonObjectHolder() {
return jsonObjectHolder;
}
public void setJsonObjectHolder(JsonNode jsonObjectHolder) {
this.jsonObjectHolder = jsonObjectHolder;
}
public String getJsonColumn() {
return this.jsonObjectHolder.toString();
}
public void setJsonColumn(String jsonColumn) throws IOException {
ObjectMapper mapper = new ObjectMapper();
this.jsonObjectHolder = mapper.readTree(jsonColumn);
}
@Override
public String toString() {
return String.format("TryJson [Id=%s, JsonColumn=%s, jsonObjectHolder=%s]", id, jsonColumn, jsonObjectHolder);
}
}
http://localhost:8080/api/postJson
ID JSON_COLUMN
1个空
不确定我在这里缺少什么。我确实在调试期间填充了 jsonObjectHolder,但我仍然得到 NULL TryJson [Id=1, JsonColumn=null, jsonObjectHolder={"name":"Name","age":404}]
更新 2
我得到空指针异常。
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: Exception occurred inside getter of com.example.tryjson.tryjson.model.TryJson.jsonColumn; nested exception is org.hibernate.PropertyAccessException: Exception occurred inside getter of com.example.tryjson.tryjson.model.TryJson.jsonColumn] with root cause
java.lang.NullPointerException: null
at com.example.tryjson.tryjson.model.TryJson.getJsonColumn(TryJson.java:52) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_192]
这是我的新模型
@Entity
@Table(name = "TryJson")
public class TryJson {
private Integer id;
@Transient
private JsonNode jsonObjectHolder;
public TryJson() {
}
public TryJson(Integer id, JsonNode jsonObjectHolder) {
this.id = id;
this.jsonObjectHolder = jsonObjectHolder;
}
@Id
@Column(name = "id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Transient
public JsonNode getJsonObjectHolder() {
return jsonObjectHolder;
}
public void setJsonObjectHolder(JsonNode jsonObjectHolder) {
this.jsonObjectHolder = jsonObjectHolder;
}
@Column(name = "json_column")
public String getJsonColumn() {
return this.jsonObjectHolder.toString();
}
public void setJsonColumn(String jsonColumn) throws IOException {
ObjectMapper mapper = new ObjectMapper();
this.jsonObjectHolder = mapper.readTree(jsonColumn);
}
}
【问题讨论】:
-
仅供参考,JSON 是一个字符串,它是一种基于文本的格式。
标签: json spring-boot spring-data-jpa