У меня есть простое POJO, подобное приведенному ниже. Геттеры и сеттеры опущены для краткости.
@Document(collection = "posts")
public class Post {
@Id
public String id;
@Field(name = "author")
public String author;
@Field(name = "title")
public String title;
@Field(name = "body")
public JSONObject body;
public Post() {
}
public Post(String id, String author, String title, JSONObject body) {
this.id = id;
this.title = title;
this.author = author;
this.body = body;
}
И я использую сохранение по умолчанию из MongoRepository, чтобы сохранить свои данные:
import org.springframework.data.mongodb.repository.MongoRepository;
public interface PostRepository extends MongoRepository<Post, String> {
}
Он сохраняется в MongoDB с использованием кодов ниже:
@PostMapping
public Post addPost(HttpEntity<String> httpEntity) {
try {
JSONObject obj = new JSONObject(httpEntity.getBody());
Post p1 = new Post("123", obj.getString("author"), obj.getString("title"),
obj.getJSONObject("body"));
return postRepository.save(p1);
} catch (Exception e) {
e.printStackTrace();
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Foo Not Found", e);
}
}
Когда он сохраняется в MongoDB, он сохраняет поля, которые изначально не находятся в JSON, который я должен сохранить.
Оригинал JSON:
{
body: {
blocks: {
[
{ data: "Data 1", type: "Type 1" },
{ data: "Data 2", type: "Type 2" },
]
},
version: "1.2.2"
}
}
Сохранено JSON:
{
body: {
map: {
blocks: {
myArrayList:
[
{ map: { data: "Data 1", type: "Type 1" }, _class: "org.json.JSONObject" },
{ map: { data: "Data 2", type: "Type 2" }, _class: "org.json.JSONObject" },
],
_class: "org.json.JSONArray"
},
version: "1.2.2"
}
}
}
Когда я пытаюсь получить данные, я получаю следующую ошибку:
java .lang .IllegalStateException: Невозможно установить карту свойств, потому что нет установщика, нет иссушения и он не является частью конструктора сохраняемости publi c org. json .JSONObject ()!
Вот как я получаю data:
@GetMapping(path = "/{id}")
public Post getPost(@PathVariable String id) {
try {
Optional<Post> post = postRepository.findById(id);
return post.orElseThrow();
} catch (Exception e) {
e.printStackTrace();
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Foo Not Found", e);
}
}
Мой первый вопрос: есть ли способ сохранить объект JSON в MongoDB без дополнительных полей (например, map
, myArrayList
)?
Во-вторых, как мне получить данные с помощью поля JSONObject в POJO?
Заранее спасибо!