2017-02-12 67 views
0

我遇到了問題,即JSON不包含嵌套對象列表。無法獲取JSON中的嵌套對象列表

我有2個類,其中一個是攜帶有關汽車服務的信息,另一個是關於服務的信息。

一個autoservice可以有很多服務。所以,我們有這種關係 - 一對多。

AutoService類:

@Entity 
@Table(name = "AutoRate") 
public class AutoService { 

    public AutoService() { 
    } 

    @Id 
    @GeneratedValue(generator = "increment") 
    @GenericGenerator(name = "increment", strategy = "increment") 
    private long id; 

    @Column(name = "serviceName", nullable = false) 
    private String serviceName; 

    @Column(name = "imageURL", nullable = false) 
    private String imageURL; 

    @Column(name = "mapCoordinate", nullable = false) 
    private String mapCoordinate; 

    @Column(name = "websiteURL", nullable = false) 
    private String websiteURL; 

    @Column(name = "phoneNumber", nullable = false) 
    private String phoneNumber; 

    @OneToMany(fetch = FetchType.EAGER) 
    @JoinColumn(name = "autoServiceId") 
    private List<Service> services; 

    public long getId() { 
     return id; 
    } 

    public String getServiceName() { 
     return serviceName; 
    } 

    public String getImageURL() { 
     return imageURL; 
    } 

    public String getMapCoordinate() { 
     return mapCoordinate; 
    } 

    public String getWebsiteURL() { 
     return websiteURL; 
    } 

    public String getPhoneNumber() { 
     return phoneNumber; 
    } 
} 

Service類:

@Entity 
@Table(name = "Service") 
public class Service { 

    public Service() { 
    } 

    @Id 
    @GeneratedValue(generator = "increment") 
    @GenericGenerator(name = "increment", strategy = "increment") 
    @Column(name = "serviceId", unique = true, nullable = false) 
    private long serviceId; 

    @Column(name = "serviceName", nullable = false) 
    private String serviceName; 

    @Column(name = "category", nullable = false) 
    private String category; 

    @Column(name = "price", nullable = false) 
    private int price; 

    @Column(name = "autoServiceId", nullable = false) 
    private long autoServiceId; 

    public long getId() { 
     return serviceId; 
    } 

    public String getCategory() { 
     return category; 
    } 


    public int getPrice() { 
     return price; 
    } 

    public String getServiceName() { 
     return serviceName; 
    } 

    public long getAutoServiceId() { 
     return autoServiceId; 
    } 
} 

此外,我現在用的是JpaRepository獲得從數據庫對象:

public interface AutoRateRepository extends JpaRepository<AutoService, Long> { 
} 

這裏是Controller類:

@RestController 
@RequestMapping("/directory") 
public class ServiceController { 

    @Autowired 
    private AutoRateService dataBaseService; 

    @RequestMapping(value = "/get", method = RequestMethod.GET) 
    @ResponseBody 
    public List<AutoService> getData(){ 
     List<AutoService> dataList = dataBaseService.getAll(); 
     return dataList; 
    } 
} 

但後來當我試圖讓JSON對象我得到下一個:

[ 
    { 
    "id": 1, 
    "serviceName": "SpeedyName", 
    "imageURL": "Url for speedy", 
    "mapCoordinate": "123123 44121 ", 
    "websiteURL": "speedy.com", 
    "phoneNumber": "1231251" 
    }, 
    { 
    "id": 2, 
    "serviceName": "Другой сервис", 
    "imageURL": "Урл для второго сервиса", 
    "mapCoordinate": "123 12фывфы", 
    "websiteURL": "другойсервис.ком", 
    "phoneNumber": "12312333" 
    } 
] 

沒有從數據庫中嵌套對象的列表(List<Services>

你能幫我解決這個問題?

有人告訴我,我已經錯過了@JsonManagedReference註解,但它並沒有幫我(

+3

將公共列表 getServices(){...}方法添加到您的AutoService類 –

回答

1

正如在評論中規定,你錯過了在AutoService實體getServices()方法暴露序列化集合。

作爲一個側面說明,厭倦,如果你的Service實體有一個反向引用父AutoService。如果是這樣,你需要確保你的JSON框架知道如何處理循環的循環,或者您需要在序列化AutoService實例以避免堆棧溢出時觸發忽略後向引用流。

+0

感謝您的回答,您是對的 – Andrew