[SPRING] json을 객체 목록으로 변환
SPRINGjson을 객체 목록으로 변환
나는 다음과 같은 String을 가진다 :
String json = "[{\"id\": \"0\", \"ip\": \"123\", \"mac\": \"456\"}, {\"id\": \"1\", \"ip\": \"111\", \"mac\": \"222\"}]";
그리고 다음과 같은 SlaveEntity Entity :
public class SlaveEntity extends BaseEntity {
private String ip;
private String macAddress;
private String status;
@OneToMany(mappedBy="slave", targetEntity = PositionEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<PositionEntity> positions;
}
json을 사용하고 SlaveEntity List를 반환하는 메서드를 작성했습니다.
public static List<SlaveEntity> JsonToSlaveEntity(String json) {
ObjectMapper objectMapper = new ObjectMapper();
List<SlaveEntity> obj = new ArrayList<SlaveEntity>();
try {
obj = objectMapper.readValue(json, List.class);
} catch (IOException e) {
e.printStackTrace();
}
return obj;
}
문제는 obj List 결과가 다음과 같습니다.
하지만 obj리스트가 필요한 것은 다음과 같습니다 :
그러면 필요한 목록을 어떻게 얻을 수 있습니까?
해결법
-
==============================
1.결과를 객체 목록으로 변환하거나 List 클래스가 아닌 유형 매개 변수를 전달할 수 있습니다.
결과를 객체 목록으로 변환하거나 List 클래스가 아닌 유형 매개 변수를 전달할 수 있습니다.
String jsonString = "[{\"id\": \"0\", \"ip\": \"123\", \"mac\": \"456\"}, {\"id\": \"1\", \"ip\": \"111\", \"mac\": \"222\"}]";
List<Object> items = objectMapper.readValue( jsonString, objectMapper.getTypeFactory().constructParametricType(List.class, Object.class) );
List<SlaveEntity> items = objectMapper.readValue( jsonString, objectMapper.getTypeFactory().constructCollectionType(List.class, SlaveEntity.class) );
이것이 내가 생각해내는 것입니다.
import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.databind.ObjectMapper; public class EntityTest { public static void main(String[] args) { String json = "[{\"id\": \"0\", \"ip\": \"123\", \"mac\": \"456\"}, {\"id\": \"1\", \"ip\": \"111\", \"mac\": \"222\"}]"; for (SlaveEntity entity : jsonToSlaveEntity(json)) { System.out.println(entity); } } public static List<SlaveEntity> jsonToSlaveEntity(String json) { ObjectMapper objectMapper = new ObjectMapper(); try { return objectMapper.readValue( json, objectMapper.getTypeFactory().constructCollectionType(List.class, SlaveEntity.class) ); } catch (IOException e) { e.printStackTrace(); } return new ArrayList<SlaveEntity>(); } }
public class BaseEntity { private long id; public long getId() { return id; } public void setId(long id) { this.id = id; } }
import java.util.List; import javax.persistence.CascadeType; import javax.persistence.FetchType; import javax.persistence.OneToMany; import com.fasterxml.jackson.annotation.JsonProperty; public class SlaveEntity extends BaseEntity { private String ip; @JsonProperty("mac") private String macAddress; private String status; @OneToMany(mappedBy = "slave", targetEntity = PositionEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<PositionEntity> positions; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getMacAddress() { return macAddress; } public void setMacAddress(String macAddress) { this.macAddress = macAddress; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public List<PositionEntity> getPositions() { return positions; } public void setPositions(List<PositionEntity> positions) { this.positions = positions; } @Override public String toString() { return String.format( "SlaveEntity [id=%d, ip=%s, mac=%s, status=%s, positions=%s]", getId(), ip, macAddress, status, positions); } }
public class PositionEntity { // ? }
SlaveEntity [id=0, ip=123, mac=456, status=null, positions=null] SlaveEntity [id=1, ip=111, mac=222, status=null, positions=null]
from https://stackoverflow.com/questions/39999420/convert-json-to-object-list by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring은 상태 비 저장 세션 관리에도 불구하고 JSESSIONID를 추가한다. (0) | 2019.05.15 |
---|---|
[SPRING] javax.naming.NameNotFoundException : 이름 [comp / env]가이 Context에 바인드되어 있지 않다 (0) | 2019.05.15 |
[SPRING] 봄 + JPA + 최대 절전 모드 (0) | 2019.05.15 |
[SPRING] Struts2; StrutsSpringTestCase JUnit 테스트를 위해 세션 열기 (0) | 2019.05.15 |
[SPRING] JdbcTemplate - SQL MERGE를 사용하여 Oracle BLOB 삽입 또는 업데이트 (0) | 2019.05.15 |