Как я могу сохранить Raw Json как String в базе данных MsSql с запросом POST - используя Jackson ObjectMapper для преобразования строки в Json, но не в состоянии преобразовать raw 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 ":" example Glossary "," GlossDiv ": {" title ":" S "," GlossTerm ":" Стандартный обобщенный язык разметки "}", "{" name ":" somebody ", "age": 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
@ Таблица (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);
}
}