2017-02-17 153 views
1

我是Spring框架的新手,嘗試構建RESTful Web服務。現在我有點卡住了這個問題。JSON與Spring的嵌套集合對象

我有一些實體類一樣的UserDetails(getter/setter方法,equals()和hashCode()方法略):

public class UserDetails { 

    private Long userId; 
    private String login; 
    private String firstName; 
    private String lastName; 

    private Map<ActionDetails, Boolean> confirmedActionsMap; 
} 

和ActionDetails(再次getter/setter方法,equals()和hashCode()方法略) :

public class ActionDetails { 

    private Long actionId; 
    private String actionName; 
    private String actionDescription; 
} 

我在@RestController返回的UserDetails的方法:

@GET 
@RequestMapping("/user") 
@Produces ({ "application/json" }) 
public ResponseEntity<User> getUser(){ 

    UserDetails userDetails = //obtaining user somehow 

    return new ResponseEntity<User>(userDetails, HttpStatus.OK); 
} 

但作爲迴應,我得到JSON在地圖ActionDetails不序列化JSON,但簡稱的toString()就可以了:

{ 
    "userId": 1, 
    "login": "j.doe", 
    "firstname": "John", 
    "lastname": "Doe", 
    "confirmedActionsMap": {"[email protected]": true} 
} 

ActionDetails自己與否有關其他控制器方法返回的是序列化到JSON就好了。 什麼是最適合序列化REST中的集合中的對象的方法?

+0

它調用ActionDetails.toString(),因爲在這種情況下它是地圖的關鍵。 –

+0

我建議創建兩種類型的列表confirmedActionsList和NotConfirmedActionsList並省略布爾值。 –

回答

1

A Mapkey,value對的表示。在密鑰上調用toString()是表示密鑰的唯一合理方式。

如果你想序列化ActionDetail不同,我建議在另一個類包裝ActionDetailBoolean並把在一個List

例如:

public class UserDetails { 
    private Long userId; 
    private String login; 
    private String firstName; 
    private String lastName; 
    private List<ActionDetailWrapper> confirmedActions; 
} 

public class ActionDetails { 
    private Long actionId; 
    private String actionName; 
    private String actionDescription; 
} 

public class ActionDetailWrapper { 
    private ActionDetails actionDetails; 
    private Boolean result; 
} 

另外,您可以鍵入您的Map使用actionIdActionDetails並添加BooleanActionDetails類。