Java Spring boot парсинг Json с несколькими вложениями
Всем привет. Есть JSON, который приходит в POST-запросе:
{
"id": 12,
"name": "Jovan Lee",
"email": "[email protected]",
"phone": "+49 176 14890478",
"age": 32,
"info": {
"user": {
"user_id": 123,
"user_login": "test",
"user_active": true
}
}
}
Контроллер:
@PostMapping(value = "/getUser", consumes = "application/json", produces = "application/json")
public ResponseEntity<?> create(@RequestBody GetUser getUser) throws FileNotFoundException {
return new ResponseEntity<>("ok", HttpStatus.OK);
}
Вопрос, как "добраться" до user_id и user_login? Модели:
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Map;
public class Info{
@JsonProperty("info")
private Map<String, Object> info;
public Map<String, Object> getInfo() {
return info;
}
public void setInfo(Map<String, Object> info) {
this.info=info;
}
}
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Map;
public class User{
@JsonProperty("user")
private Map<String, Object> user;
public Map<String, Object> getUser() {
return user;
}
public void setUser(Map<String, Object> user) {
this.user=user;
}
}
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Map;
public class Decrypt {
private int user_id;
private String user_login;
private boolean user_active;
@JsonProperty("info")
private Info info;
@JsonProperty("user")
private User user;
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id= user_id;
}
public String getUser_login() {
return user_login;
}
public void setUser_login(String user_login) {
this.user_login= user_login;
}
public boolean getUser_active() {
return user_active;
}
public void setUser_active(boolean user_active) {
this.user_active= user_active;
}
}
но getUser_login null... подскажите, как правильно описать парсинг Json? Спасибо!
Ответы (2 шт):
Автор решения: ChurKIT
→ Ссылка
Здесь отлично подойдет JsonPath
Info info = JsonPath.parse(jsonString)
.read("$.info", Info.class);//вместо jsonString твой response
User user = JsonPath.parse(jsonString)
.read("$.info.user", User.class);//вместо jsonString твой response
Либо можешь попробовать создать сущность со всеми параметрами JSON'a и запарсить его с помощью Jackson
ObjectMapper om = new ObjectMapper();
AllInfo allInfo = om.readValue(jsonString, AllInfo.class) //сущность с параметрами с приходящего JSON'a
Info info = allInfo.info;
User user = info.user;
Автор решения: Михаил Муругов
→ Ссылка
У Вас сложность написать модель GetUser?
import lombok.Data;
@Data
public class GetUser {
private Integer id;
private String name;
private String email;
private String phone;
private Integer age;
private Info info;
}
@Data
public class Info {
private User user;
}
@Data
public class User {
private Integer user_id;
private String user_login;
private Boolean user_active;
}
До нужных полей затем можете добраться через геттеры:
getUser.getInfo().getUser().getUser_id();