2016-09-02 2 views
0

Spring Boot에서 JSON 메시지를 비 직렬화하여 Java 객체를 생성하려고합니다. Spring에서 인바운드 JSON 메시지를 Java Object로 변환

public class Status implements Serializable { 
    private int uptime; 
} 

그럼 내가 가진 같은 나머지 컨트롤러 :

@RestController 
public class StatusReceiver { 

    @RequestMapping(value = "/poststatus", method = RequestMethod.POST) 
    public @ResponseBody Status storeStatus(@RequestBody Status statusMessage) { 

     System.out.println("Uptime: " + statusMessage.getUptime()); 

     return statusMessage; 

    } 

} 

내가 확실히 내가 여기에 뭘하는지의 공정한 조금 이해가 안 나는 같은 클래스가 있습니다. 컨트롤러가 메시지를 수신하여 데이터베이스에 저장할 때 상태 개체를 만들고 싶습니다. 이 코드의

출력은 다음과 같습니다가받는 것

Uptime: 0 

메시지는 다음과 같습니다 나는 분명히 뭔가를 누락

{ 
    "Status": [ 
    { 
     "uptime": 12345.0 
    } 
    ] 
} 

. Spring이 JSON 객체를 Status Java 객체로 변환하도록하려면 어떻게해야합니까? 또한이 방법의 수익은 어디로 가고 일을 의미합니까?

+1

코드가 작동해야합니다. 문제가 정확히 무엇입니까? – sidgate

+0

죄송합니다. 저는 여기서 두 가지 중요한 측면을 놓쳤다는 것을 깨달았습니다. 분명히 12345.0은 Long입니다. Status 멤버 가동 시간을 Long으로 변경했지만 변경하지 않았습니다. –

답변

1

요청 본문 JSON이 상태 개체 구조와 일치하지 않습니다. 어느 몸

{uptime: 12345.0} 

해야하거나 상태 클래스는

class Status { 
    List<Map<String, Long>> status = new ArrayList<>(); 
} 

대신지도의 목록을 가지는 것은, 당신은 새로운 클래스를 정의 할 수 있으며이 새로운 클래스의 목록을 가지고 있어야

class StatusInfo{ 
    long uptime; 
} 

class Status { 
    List<StatusInfo> status = new ArrayList<>(); 
} 
+0

고마워요. 첫 번째 옵션은 내가하려는 일을 잘 반영한다고 생각합니다. 지금은 JSON에서 둘 이상의 항목을 사용하도록 노력하고 있습니다. 꽤 쉬워졌고 JSON을 더 잘 사용하는 법을 배워야합니다. –

관련 문제