使用Spring-MVC和JPA进行JSON序列化

时间:2013-11-20 09:39:28

标签: json spring-mvc jpa

我有一个使用JavaScript MVC框架(Ember.js),Spring-MVC控制器层和Spring / JPA业务层的Web应用程序。我的问题是 关于在Spring控制器中将Java输出序列化为JSON。

控制器类如下所示:

@RequestMapping("countries")
@ResponseBody
public Collection<Country> getAll() {
  return countryService.getAllCountries();
}

@RequestMapping("country/{id}")
@ResponseBody
public Country getById(@PathVariable Long id) {
  return countryService.getCountry(id);
}

JPA实体是:

@Entity
class Country {

  @OneToMany
  Collection<State> states;

  //...
}

@Entity
class State {
 // ...
}

方法getAll用于显示每个国家/地区的信息(名称,大小,人口)有限的屏幕。方法getById用于显示一个国家及其完整数据集的屏幕;这包括其国家子实体的收集。

JSON序列化的最佳建议解决方案是将Jackson添加到类路径中,让Spring-MVC完成所有的魔术。然而,让杰克逊盲目地序列化每个属性太过粗糙。但是使用@JsonProperty或@JsonIgnore等杰克逊注释来注释我的JPA字段并不具吸引力。首先,它在技术上将我的业务层与界面问题联系起来。其次,它会危及维护:JPA属性名称的任何更改都必须传播到JavaScript代码 - 没有编译器的帮助。第三,更重要的是,实体的属性是否必须序列化在实体层面上不是确定性的:在“getAll”案例中,国家必须 不是序列化的,而在“getById”中它们必须是。

我可以依靠杰克逊忽视懒惰的JPA关系吗?例如,在“getAll”操作中,杰克逊会忽略每个国家的“州”属性吗?

或者我应该手动实现Java-to-JSON序列化?

0 个答案:

没有答案