2017-02-12 43 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