У меня возникли проблемы с придумыванием способа разбора этого типа JSON. Мне нужно иметь возможность получать доступ как к данным, так и к сообщению отдельно после получения этого ответа внутри моего приложения.
{
"data": [
{
"email": "[email protected]",
"firstName": "Seras",
"lastName": "Meras"
},
{
"email": "[email protected]",
"firstName": "Oras",
"lastName": "Moras"
},
{
"email": "[email protected]",
"firstName": "hello",
"lastName": "bye"
},
{
"email": "[email protected]",
"firstName": "Seras",
"lastName": "Meras"
}
],
"message": "Success"
}
Может ли кто-нибудь предложить метод специально для загрузки Spring? Или распространенный способ, который используется в Spring boot для разбора этого типа JSON.
Спасибо.
РЕДАКТИРОВАТЬ
Мои главные вопросы будут заключаться в том, какой инструмент можно использовать для Spring Boot и как будет выглядеть мой класс POJO, если я буду использовать Jackson. Будет ли это как-то так?:
public class testPojo {
Users[] users;
String message;
}
Вы пробовали что-нибудь? Вы ознакомились с какой-либо документацией или образцами, предоставленными официальным сайтом Spring?
Напишите "Как распарсить JSON java" в гугле, пожалуйста.
Пока у меня есть только собственный сервис, который общается с разными ответами, которые мне не нужно анализировать. Это ответ, который я получаю от другой службы REST, к которой я подключаюсь, и просто не могу придумать способ разобрать его на объект или объекты. Я только проверил здесь другие вопросы, но не нашел способа для этого типа JSON. Я просто даже не знаю, с чего начать. Кроме того, если возможно, мне не нужно было бы использовать какие-либо внешние файлы JAR. Я могу использовать зависимости maven.
Если вы пытаетесь, чтобы кто-то другой сделал это за вас, вам следует научиться решать свои собственные проблемы. Это можно быстро решить с помощью простого поиска в Google.
@Abhijith Nagarajan Главный вопрос для меня: если я использую Джексона в этом случае, как будет выглядеть мой класс POJO? Будет ли это просто массив пользователей и строковое сообщение?
@SvajunasKavaliauskas, как сказал Майк Тунг, выполните поиск в Google, прежде чем задавать вопрос, вот гид. Если вы столкнетесь с проблемами, вернитесь с вопросом о проблеме, которая у вас есть.
@Dimitris Хорошо, спасибо, я вернусь, если у меня возникнут проблемы с определенным кодом.




Класс Pojo будет выглядеть так:
public class TestPojo{
private Users[] data;
private String message;
public Users[] getData() {
return data;
}
public void setData(Users[] data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
class Users {
private String email;
private String firstName;
private String lastName;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
используйте @RequestBody в параметре метода вашего контроллера.
@RestController
class AbcController{
PostMapping("/api")
public String create(@RequestBody TestPojo test){
// you can acess your json in test object
return "done"
}
}
Спасибо. Теперь немного яснее.
Дайте мне знать, если вы обнаружите какие-либо проблемы при реализации того же самого.
Необходимые установщики геттеров, поскольку Джексон при весенней загрузке по умолчанию преобразует json в объект pojo с помощью методов установщиков геттеров.
Привет еще раз. Просто хотел спросить, как будет выглядеть pojo, если вместо данных вместо [] будет { } и только один пользователь внутри этих данных. Я в замешательстве, так как с тех пор есть два открытия { подряд. Я могу отредактировать свой вопрос, чтобы сделать его более понятным, если вам нужно.
{ "data": { "email": "[email protected]", "firstName": "Seras", "lastName": "Meras" }, "message": "hello"} для такого типа данных json pojo будет общедоступным в классе TestPojo вместо Users[] это будут только Users
измените Users[] на Users в TestPojo и его сеттере-получателе
Хорошо спасибо большое!
Ой, извините, json все-таки не такой. Он начинает { "данные" { { "электронная почта"... вот с чем я борюсь. И я голосую, но голоса не учитываются из-за все еще низкой репутации. Я добавлю json через минуту.
Можете ли вы предоставить полный json правильно?
{ "data":{ { "email": "[email protected]", "firstName": "Seras", "lastName": "Meras" }},"message":"Success"}
Это недопустимый json. ключ данных не может содержать {{ он должен быть [{ (список пользовательских объектов)
Да, это был предыдущий вариант без лишних {}. Извините, что беспокою вас. Спасибо за помощь. Я постараюсь двигаться вперед.
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import lombok.Getter;
import lombok.Setter;
import org.junit.Test;
import org.springframework.context.annotation.Bean;
import java.io.IOException;
import java.util.List;
public class TestJUnit {
@Test
public void exec() {
String json = "{" +
" \"data\": [" +
" {" +
" \"email\": \"[email protected]\"," +
" \"firstName\": \"Seras\"," +
" \"lastName\": \"Meras\"" +
" }," +
" {" +
" \"email\": \"[email protected]\"," +
" \"firstName\": \"Oras\"," +
" \"lastName\": \"Moras\"" +
" }," +
" {" +
" \"email\": \"[email protected]\"," +
" \"firstName\": \"hello\"," +
" \"lastName\": \"bye\"" +
" }," +
" {" +
" \"email\": \"[email protected]\"," +
" \"firstName\": \"Seras\"," +
" \"lastName\": \"Meras\"" +
" }" +
" ]," +
" \"message\": \"Success\"" +
"}".replaceAll(" ", "");
ObjectMapper mapper = new ObjectMapper();
try {
JsonParser parser = mapper.readValue(json, JsonParser.class);
} catch (IOException e) {
e.printStackTrace();
}
}
@Getter
@Setter
private static class JsonParser {
private List<Data> data;
private String message;
}
@Getter
@Setter
private static class Data{
private String email;
private String firstName;
private String lastName;
}
// @Configuration
private static class Configuration{
@Bean
public ObjectMapper objectMapper(){
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
mapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
mapper.setVisibility(mapper.getSerializationConfig()
.getDefaultVisibilityChecker().withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
return mapper;
}
}
}
Спасибо. Как я могу затем сериализовать его обратно из моего объекта в Json String? Чтобы получить ту же строку, что и исходная.
Можете ли вы поделиться своим кодом до сих пор?