Java Hibernate实体到Json对象,jackson到http post

Java Hibernate实体到Json对象,jackson到http post,java,json,web-services,jersey,jackson,Java,Json,Web Services,Jersey,Jackson,我正在尝试使用jackson从hibernate实体创建一个json对象,该对象可以使用jersey发布到远程url。我似乎不知道如何将hibernate实体转换为json对象。使用resteasy jackson,我能够创建自己的web服务,该服务可由localhost访问,并在屏幕中正确输出json对象,但我希望构建json对象而不必在自己的应用程序中使用web服务。也许我做得不对?我只是不想手动将每个属性添加到json对象中 到目前为止我所尝试的 接口 @Path("/company")

我正在尝试使用jackson从hibernate实体创建一个json对象,该对象可以使用jersey发布到远程url。我似乎不知道如何将hibernate实体转换为json对象。使用resteasy jackson,我能够创建自己的web服务,该服务可由localhost访问,并在屏幕中正确输出json对象,但我希望构建json对象而不必在自己的应用程序中使用web服务。也许我做得不对?我只是不想手动将每个属性添加到json对象中

到目前为止我所尝试的

接口

@Path("/company")
public interface CompanyResource {

    @GET
    @Produces("application/json")
    public List<Company> getAllDomains();

    @POST
    @Produces("application/json")
    public Response post(Company company);

    @GET
    @Path("{id}")
    @Produces("application/json")
    public Company getDomainObject(@PathParam("id") Integer id);

}
公司级

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Company extends StatefulEntity {

    @Validate("maxLength=50,required")
    private String name;

    @Column(nullable = true)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createDate;

    @Column(nullable = true)
    @Temporal(TemporalType.TIMESTAMP)
    private Date cancelDate;

    @Column(nullable = true)
    @Temporal(TemporalType.TIMESTAMP)
    private Date modifyDate;

    @ManyToOne
    @JoinColumn(name="parent_id")
    private Company parent;

    @Column(nullable = true, length = 5)
    private Integer roomUnitCount;

    @Column(nullable = false, length = 8)
    private String accountNumber;

    @JsonIgnore
    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }

        //additional getters setters
    }
cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.datasource">jdbc/domain</property>
        <property name="hbm2ddl.auto">validate</property>

        <property name="hibernate.format_sql">false</property>
        <property name="hibernate.show_sql">false</property>

        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.use_query_cache">true</property>
        <property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>
        <property name="hibernate.generate_statistics">true</property>
    </session-factory>
</hibernate-configuration>

jdbc/域
验证
假的
假的
真的
真的
net.sf.ehcache.hibernate.EhCacheRegionFactory
真的

如果我对您的理解很好,那么您正在寻找将Java对象转换为匹配的JSON表示。这被称为JSON序列化,您在“stackoverflow”中有一些关于这一问题的链接


  • 如果我了解您正在尝试做什么,那么您已经编写了很多代码,这些代码对于您正在尝试完成的任务来说不是很有用。首先,您应该只在服务器端定义资源类。其次,直接调用它们充满了问题,它们是应该由容器调用的服务器组件

    好消息是,泽西岛的客户非常健壮。只要设置正确,它将自动将对象序列化为适当的格式。在您的情况下,您需要确保在客户端中包含jersey json JAR。如果是,则可以使用以下代码让它自动将对象转换为JSON:

    Company domainObject = companyDAO.findCompanyById(id);
    ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON)
        .entity(domainObject, MediaType.APPLICATION_JSON)
        .post(ClientResponse.class);
    
    此代码假定服务器正在使用
    ClientResponse
    的实例进行响应。还要注意的是,您需要在客户机类路径中使用jersey json和Jackson JAR,这样才能工作。如果使用Maven,则足以包含这些依赖项:

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.17</version>
    </dependency>
    
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.17</version>
    </dependency>
    
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.17</version>
    </dependency>
    
    
    泽西岛
    球衣核心
    1.17
    泽西岛
    泽西岛客户
    1.17
    泽西岛
    泽西json
    1.17
    
    否则,您需要手动包括所有正确的JAR,最小设置:

    • jackson-core-asl-1.9.2.jar
    • jackson-jaxrs-1.9.2.jar
    • jackson-mapper-asl-1.9.2.jar
    • jackson-xc-1.9.2.jar
    • jersey-core-1.14.jar
    • jersey-json-1.14.jar
    • jersey-server-1.14.jar

    您的问题并不完全清楚。您的客户在哪里定义了
    companyResource
    ?您是否试图在客户端创建
    公司
    对象,并将其用于服务器的POST请求中?@Perception Company是hibernate实体对象,companyResource只是一个记录在这里的服务,我只是想获取一个特定的公司对象,将其转换为json对象,并使用jersey将其发布到远程域。你能提供公司类和一些支持文件吗。你的hb xml是什么或者它是在哪里定义的。添加了额外的类。我为没有把这个问题说得更清楚而道歉。我只是对创建web服务非常陌生。我的目标是构建一个json对象,并将其发布到远程url“restful”中,远程url可以处理json对象。几个简短的问题。Jackson将发射我注释为@JsonIgnor的对象,这种情况还会发生吗?最后,我收到了这个例外,你知道它是什么意思吗?com.sun.jersey.api.client.ClientHandlerException:com.sun.jersey.api.client.ClientHandlerException:未找到Java类型、类com.communication.domain.entities.Company和MIME媒体类型application/json的消息体编写器found@George-1)是的,实体对象上的所有Jackson注释将正常处理。2) 确保包含所有必需的jar(jersey json、jackson core asl、jackson jaxrs和jackson mapper)。我更新了所有jar,缺少一个jersey jar,因此安装了该包。不管怎样,我仍然收到那个例外。我应该在dao中用@products(MediaType.APPLICATION_JSON)这样的东西来注释我的getCompany方法吗?尝试添加
    final ClientConfig=new DefaultClientConfig();config.getFeatures().put(JSONConfiguration.FEATURE\u POJO\u映射,Boolean.TRUE)就在
    客户端前面。创建
    行。Aso,将
    Client.create
    更改为
    Client.create(config)
    。谢谢,你帮了我很多忙。非常感谢。
    Company domainObject = companyDAO.findCompanyById(id);
    ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON)
        .entity(domainObject, MediaType.APPLICATION_JSON)
        .post(ClientResponse.class);
    
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.17</version>
    </dependency>
    
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.17</version>
    </dependency>
    
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.17</version>
    </dependency>