2017-11-10 10 views
0

私のサーバーからJSON応答で使用される名前を指定できるようにします。一緒に応答でJSON名を指定する

{ 
"_embedded" : { 
    "places" : [...], 
    "accounts" : [...], 
    "_links" : { 
    "self" : { 
     "href" : "http://staging-api.papped.co/accounts/search/forSearchPage" 
    } 
}, 
"page" : { 
    "size" : 10, 
    "totalElements" : 10, 
    "totalPages" : 1, 
    "number" : 0 
} 

このグループのすべてのアカウントと名称「アカウント」の下でそれらをスティック:これは、このような応答を返す

@RequestMapping(value = "/accounts/search/forSearchPage", method = RequestMethod.GET) 
public ResponseEntity<PagedResources<Resource<Object>>> searchForFeaturedContent() { 
    List<Account> nearbyAccounts = accountService.findClosestNearbyAccounts(); 
    List<Account> onlineAccounts = accountService.findOnlineAccounts(); 
    Pageable pageable = new PageRequest(0, 10); 
    Page<Place> places = placeService.findTop10ByFeaturedTrue(pageable); 
    List<Place> placesList = places.getContent(); 

    List<Object> accountsAndPlaces = new ArrayList<>(); 
    accountsAndPlaces.addAll(nearbyAccounts); 
    accountsAndPlaces.addAll(onlineAccounts); 
    accountsAndPlaces.addAll(placesList); 

    // Create page out of this list 
    Page<Object> pageOfAccountsAndPlaces = new PageImpl<>(accountsAndPlaces, pageable, accountsAndPlaces.size()); 
    return new ResponseEntity<>(objectPagedAssembler.toResource(pageOfAccountsAndPlaces), HttpStatus.OK); 
} 

は、私は、次のコードを持っています。ただし、次のように変更したいと考えています。

{ 
"_embedded" : { 
    "places" : [...], 
    "nearbyAccounts" : [...], 
    "onlineAccounts" : [...], // <- See how these have been separated 
    "_links" : { 
    "self" : { 
     "href" : "http://staging-api.papped.co/accounts/search/forSearchPage" 
    } 
}, 
"page" : { 
    "size" : 10, 
    "totalElements" : 10, 
    "totalPages" : 1, 
    "number" : 0 
} 

どうすればいいですか?

答えて

0

簡単な方法は、クラスを宣言することです期待どおりにシリアル化されます。

オブジェクトのリストを格納する代わりに、指定されたクラスのインスタンスを戻します。シリアライゼーションライブラリによっては、新しいタイプにアノテーションを追加する必要があります。おそらく、あなたはジャクソンです。

+0

これをページにするにはどうすればいいですか? – Tometoyou

0

何が起こっているかは、accountAndPlacesリストに2つのアカウントリストを追加したときに誤って2つのアカウントリストを連結していることです。

置き換えます

List<Account> nearbyAccounts = accountService.findClosestNearbyAccounts(); 
List<Account> onlineAccounts = accountService.findOnlineAccounts(); 

で:

List<NearByAccounts> nearbyAccounts = accountService.findClosestNearbyAccounts(); 
List<OnlineAccounts> onlineAccounts = accountService.findOnlineAccounts(); 

は、あなたが同様に二つの新しいクラスを作成する必要があります:

public class NearByAccount extends Account {} 

public class OnlineAccounts extends Account {} 
+0

ページングされたアセンブラは、それらをすべてアカウントとして扱い、別のクラスではないので、私にとってはうまくいきません:/ – Tometoyou