rest - jackson json解析器的问题: ManyToMany问题

  显示原文与译文双语对照的内容

我们正在使用 Spring MVC 和jackson解析器( java对象到 json ) 。

我们有 2个实体( 使用many-to-many关系):

  1. 项目
  2. 服务

项目包含服务列表,服务包含项目列表。

我们对控制器有一个ajax调用,它通过它的名称获取项目,以及它的服务。 一切看起来都不错。

问题是当jackson将服务列表解析为json时。 这就是结果:


[{"name":"CreateAccount","hebName":"ABC","projects":
[{"id":2,"name":"yesTouch","displayName":"ABC","authorizedUsers":[],"authorizedGroups":
[],"services":["CreateAccount",{"name":"RBMHotbill","hebName":"ABC","projects":[2]}]}]},
<b>"RBMHotbill"</b>]

什么是 hapeens,每个服务的显示时间只有一次,而另一个时间只显示它的名称。

下面是一些实体的Fragment和控制器的方法:


@Entity
@Table (name ="GOBLIN_SERVICES")
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="name")
public class Service implements Serializable {

 private static final long serialVersionUID = 8694874911004747694L;

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

 @ManyToMany(mappedBy="services")
 private List<Project> projects = new ArrayList<Project>();



@Entity
@Table (name ="GOBLIN_PROJECTS")
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Project implements Serializable {

 private static final long serialVersionUID = -666638801643613543L;

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

 @ManyToMany
 @JoinTable(name ="GOBLIN_SERVICES_PROJECTS", joinColumns = {
 @JoinColumn(name ="PROJECT_ID", nullable = false, updatable = false) },
 inverseJoinColumns = { @JoinColumn(name ="PROXY_NAME",
 nullable = false, updatable = false) })
 private List<Service> services = new ArrayList<Service>();



@RequestMapping(value="/services/list", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
 public @ResponseBody List<Service> getServicesByProjectName(Locale locale, Model model, String projectName) {
//Get Project
 Project project = projectDao.getProjectByName(projectName);
 List<Service> services = project.getServices();
 return services;
 }

有什么想法吗?

谢谢,Tal 。

时间: 作者:

我们找到了解决方案我们所需要的就是

jackson休眠模块( https://github.com/FasterXML/jackson-datatype-hibernate )

还有 spring mvc的独立配置。

发现:

使用 Jackson ( 感谢 Jigar Parekh ) 返回ajax响应

作者:
...