【问题标题】:Issue with jackson json parser: ManyToMany issuejackson json 解析器的问题:ManyToMany 问题
【发布时间】:2014-01-16 11:26:31
【问题描述】:

我们正在使用 Spring MVC 和 jackson 解析器(用于将 java 对象转换为 json)。

我们有 2 个实体(具有多对多关系):

  1. 项目
  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


    【解决方案1】:

    我们找到了解决方案。我们只需要使用:

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

    spring mvc 甚至还有单独的配置。

    发现于:

    Spring MVC return ajax response using Jackson(感谢Jigar Parekh

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多