【发布时间】:2014-01-16 11:26:31
【问题描述】:
我们正在使用 Spring MVC 和 jackson 解析器(用于将 java 对象转换为 json)。
我们有 2 个实体(具有多对多关系):
- 项目
- 服务
Project 包含服务列表,Service 包含项目列表。
我们有一个对控制器的 ajax 调用,它通过项目的名称和服务获取项目。与此同时,一切看起来都很好。
问题是当杰克逊将服务列表解析为 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>]
结果是每个服务一次完全显示,而另一次只显示其名称。
这里是实体的sn-ps和控制器的方法:
@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;
}
有什么想法吗?
谢谢, 塔尔。
【问题讨论】:
标签: json rest spring-mvc many-to-many jackson