Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jackson json解析器问题:许多问题_Json_Rest_Spring Mvc_Many To Many_Jackson - Fatal编程技术网

jackson json解析器问题:许多问题

jackson json解析器问题:许多问题,json,rest,spring-mvc,many-to-many,jackson,Json,Rest,Spring Mvc,Many To Many,Jackson,我们使用SpringMVC和jackson解析器(用于将java对象转换为json) 我们有2个实体(具有多对多关系): 计划 服务 项目包含服务列表,服务包含项目列表 我们有一个对控制器的ajax调用,它根据项目名称以及服务获取项目。与此同时,一切看起来都很好 问题在于jackson将服务列表解析为json时。 结果是: [{"name":"CreateAccount","hebName":"ABC","projects": [{"id":2,"name":"yesTouch","displa

我们使用SpringMVC和jackson解析器(用于将java对象转换为json)

我们有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>]
    
    [{“name”:“CreateAccount”,“hebName”:“ABC”,“projects”:
    [{“id”:2,“name”:“yesTouch”,“displayName”:“ABC”,“authorizedUsers”:[],“authorizedGroup”:
    [],“服务”:[“CreateCount”,{“name”:“RBMHotbill”,“hebName”:“ABC”,“projects”:[2]}]}],
    “RBMHotbill”]
    
    可能的情况是,每个服务一次完全显示,另一次仅显示其名称

    以下是实体和控制器方法的片段:

    @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;
           }
    
    @实体
    @表(name=“GOBLIN_服务”)
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class,property=“name”)
    公共类服务实现可序列化{
    私有静态最终长serialVersionUID=86948749110047694L;
    @身份证
    @列(name=“PROXY\u name”,null=false)
    私有字符串名称;
    @许多(mappedBy=“服务”)
    private List projects=new ArrayList();
    @实体
    @表(name=“GOBLIN_项目”)
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class,property=“id”)
    公共类项目实现可序列化{
    私有静态最终长serialVersionUID=-666638801643613543L;
    @身份证
    @GenericGenerator(name=“generator”,strategy=“increment”)
    @GeneratedValue(generator=“generator”)
    @列(name=“PROJECT\u ID”,null=false)
    私人长id;
    @许多
    @JoinTable(name=“GOBLIN\u SERVICES\u PROJECTS”,JointColumns={
    @JoinColumn(name=“PROJECT_ID”,nullable=false,updateable=false)},
    inverseJoinColumns={@JoinColumn(name=“PROXY_name”,
    nullable=false,updateable=false)})
    private List services=new ArrayList();
    @RequestMapping(value=“/services/list”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u value)
    public@ResponseBody List getServicesByProjectName(区域设置、模型模型、字符串projectName){
    //获取项目
    Project=projectDao.getProjectByName(projectName);
    List services=project.getServices();
    返回服务;
    }
    
    有什么想法吗

    谢谢,
    好的。

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

    jackson休眠模块()

    SpringMVC甚至还有单独的配置

    可在以下网址找到:

    (感谢)