Java 来自不同来源的HIbernate JPA查询未生成正确的Jackson JSON响应

Java 来自不同来源的HIbernate JPA查询未生成正确的Jackson JSON响应,java,json,hibernate,spring-mvc,jackson,Java,Json,Hibernate,Spring Mvc,Jackson,我正在从多个表/POJO中检索数据。我需要JSON格式的数据。在POJO类中,我使用@JsonProperty。但我没有得到所需格式的JSON结果。 我的结果是: [["2017 Sprint 1","Android development",23/12/2016,16/01/2017]] 我想要格式为{ “迭代”:“2017年Sprint 1”, “项目”:“MDM-核心与集成”, “isd”:“2016年12月23日”, “ied”:“2017年1月16日”, 我的主控制器方法: @Con

我正在从多个表/POJO中检索数据。我需要JSON格式的数据。在POJO类中,我使用@JsonProperty。但我没有得到所需格式的JSON结果。 我的结果是:

[["2017 Sprint 1","Android development",23/12/2016,16/01/2017]]
我想要格式为
{
“迭代”:“2017年Sprint 1”,
“项目”:“MDM-核心与集成”,
“isd”:“2016年12月23日”,
“ied”:“2017年1月16日”,

我的主控制器方法:

@Controller
@RequestMapping("/json/retrospective")
public class MainControllerClass 
{
    @RequestMapping(value="{userid}", method = RequestMethod.GET,produces=MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public List<Details> getInfoInJSON(@PathVariable int userid)
    {
        Configuration con = new Configuration();
        con.configure("hibernate.cfg.xml");
        SessionFactory SF = con.buildSessionFactory();
        Session session= SF.openSession();
        Query test=session.createQuery("select itr.iteration_name,prj.project_name,itr.isd,itr.ied from RetrospectiveInfo retro,IterationInfo itr,ProjectInfo prj where retro.retrospective_id ="+userid+" and retro.project_id = prj.project_id and retro.iteration_id = itr.iteration_id");
        List<Details> details= test.list();
        session.close();
        SF.close();
        return details;
    }
}

我在buildpath中获得了最新版本2.8的3个Jackson JAR注释、数据绑定和核心。我为什么会得到这样的结果?我需要在代码中做哪些更改?是否要添加JAR?请帮助

主要问题是,您正在使用不同类型的检查()构建一个由JPA查询形成的详细信息类

要解决此问题,请为所需的JSON属性创建构造函数

package com.sof.type;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonPropertyOrder({ "iteration", "project", "isd", "ied"})
public class Details {

    @JsonProperty
    private String iteration;

    @JsonProperty
    private String project;

    @JsonProperty
    private String isd;

    @JsonProperty
    private String ied;

    public Details(String iteration, String project, String isd, String ied) {
        this.iteration = iteration;
        this.project = project;
        this.isd = isd;
        this.ied = ied;
    }

}
那就这样用吧

@PersistenceContext
private EntityManager em;

List details=em.createQuery(
“选择新的com.sof.type.Details(itr.iteration\u name、prj.project\u name、itr.isd、itr.ied)”+
“从回顾信息回顾,”+
“迭代信息itr,”+
“ProjectInfo prj”+
“其中retro.retro\u id=:userId”+
“和retro.project\u id=prj.project\u id”+
“AND retro.iteration\u id=itr.iteration\u id”,Details.class)
.setParameter(“userId”,userId)
.getResultList();

您需要键入query您能用示例告诉我如何更改代码吗?在我使用hibernate.cfg.xml之前,我还没有使用过它。如何使用entitymanager配置is?或者我需要persistence.xml?
@PersistenceContext
private EntityManager em;
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("com.sof");
EntityManager em = entityManagerFactory.createEntityManager();
List<Details> details = em.createQuery(
        "SELECT NEW  com.sof.type.Details(itr.iteration_name, prj.project_name, itr.isd, itr.ied) " +
        "FROM RetrospectiveInfo retro, " +
        "     IterationInfo itr, " + 
        "     ProjectInfo prj " +
        "WHERE retro.retrospective_id = :userId " +
        "AND retro.project_id = prj.project_id " +
        "AND retro.iteration_id = itr.iteration_id", Details.class)
    .setParameter("userId", userid)
    .getResultList();