Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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
Java 如何结合Jersey、JSON和Spring_Java_Json_Spring_Jersey - Fatal编程技术网

Java 如何结合Jersey、JSON和Spring

Java 如何结合Jersey、JSON和Spring,java,json,spring,jersey,Java,Json,Spring,Jersey,我有一个测试web服务项目,我使用REST(Jersey)+JSON+Spring。问题是我不知道如何将它们结合在一起。例如,我有一个组件类,它可以与数据库一起工作: @Component @Path("/payment") public class PaymentService { @Autowired TransactionBo transactionBo; @GET @Path("/get") public Response savePaymen

我有一个测试web服务项目,我使用REST(Jersey)+JSON+Spring。问题是我不知道如何将它们结合在一起。例如,我有一个
组件
类,它可以与数据库一起工作:

@Component
@Path("/payment")
public class PaymentService {

    @Autowired
    TransactionBo transactionBo;

    @GET
    @Path("/get")
    public Response savePayment() {
        String result = transactionBo.save();

        return Response.status(200).entity(result).build();
    }
}
我还有一个JSON类,它获取并返回JSON中的对象:

@Path("/json")
public class JSONService {

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON)
    public Track getTrackInJSON() {

        Track track = new Track();
        track.setTitle("Enter Sandman");
        track.setSinger("Metallica");

        return track;
    }

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createTrackInJSON(Track track) {
        System.out.println("In post");

        String result = "Track saved : " + track;
        return Response.status(201).entity(result).build();
    }
}
现在我正试图把它们结合起来。我想从DB中获取数据并将其转换为JSON,然后在响应中返回:

@Component
@Path("/hotel")
public class HotelWs {
@Autowired
private HotelService hotelService;

@GET
@Path("/get/{hotelId}")
@Produces(MediaType.APPLICATION_JSON)
public Hotel getHotel(@PathParam("hotelId") long id) {
    Hotel hotel = hotelService.findById(id);
    if (hotel == null) {
        hotel = new Hotel();
        hotel.setId(1);
        hotel.setName("Name");
        hotel.setType("Type");
    }
    return hotel;
}
当我使用最后一个组合启动项目时,我得到以下错误:

[2014-11-28 04:05:45,597] Artifact wsproject:war exploded: Artifact is being deployed, please wait...
Nov 28, 2014 4:05:47 PM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization started
Nov 28, 2014 4:05:47 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.web.context.support.XmlWebApplicationContext@7c832cff: display name [Root WebApplicationContext]; startup date [Fri Nov 28 16:05:47 EET 2014]; root of context hierarchy
Nov 28, 2014 4:05:47 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
Nov 28, 2014 4:05:49 PM org.springframework.web.context.ContextLoader initWebApplicationContext
SEVERE: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nested exception is java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1760)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
    at sun.rmi.transport.Transport$1.run(Transport.java:178)
    at sun.rmi.transport.Transport$1.run(Transport.java:175)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
    at org.springframework.context.config.ContextNamespaceHandler$1.parse(ContextNamespaceHandler.java:65)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1297)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
    ... 56 more

Nov 28, 2014 4:05:49 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
Nov 28, 2014 4:05:49 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [] startup failed due to previous errors
[2014-11-28 04:05:49,696] Artifact wsproject:war exploded: Error during artifact deployment. See server log for details.
My pom.xml:


4.0.0
wsproject
wsproject
战争
1
wsproject
http://maven.apache.org
maven2-repository.java.net
Maven的Java.net存储库
http://download.java.net/maven/2/
违约
org.springframework
弹簧芯
4.1.2.1发布
org.springframework
春豆
4.1.2.1发布
org.springframework
spring上下文
4.1.2.1发布
org.springframework
弹簧网
4.1.2.1发布
org.springframework
德克萨斯州春季
4.1.2.1发布
org.springframework
春季甲虫
4.1.2.1发布
org.springframework.security
spring安全网
3.2.5.1发布
org.springframework.security
spring安全配置
3.2.5.1发布
org.springframework.security
spring安全内核
3.2.5.1发布
泽西岛
泽西json
1.8
泽西岛
泽西服务器
1.8
泽西岛
泽西岛客户
1.8
泽西岛
球衣核心
1.8
com.sun.jersey.contribs
泽西之春
1.8
javax.ws.rs
jsr311 api
1.1.1
javax.persistence
持久性api
1.0.2
org.hibernate
休眠实体管理器
4.3.7.最终版本
org.hibernate
冬眠核心
4.3.7.最终版本
org.hibernate
休眠注释
3.5.6-最终版本
org.hibernate
hibernate commons注释
3.3.0.ga
org.hibernate
休眠验证器
5.1.3.最终版本
mysql
mysql连接器java
5.1.34
wsproject
maven编译器插件
3
1.8
1.8
My web.xml:


Restful Web应用程序
上下文配置位置
类路径:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
泽西塞尔维特酒店
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.api.json.POJOMappingFeature
真的
com.sun.jersey.config.property.packages
com.app.rest
1.
泽西塞尔维特酒店
/休息/*
字符集过滤器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
字符集过滤器
/*

您使用的是非常旧的Jersey版本(2011年6月发布的1.8版),很可能是下载了旧版本的Spring。有一个新的(2.13是最近的一个)。查看此站点的文档和示例:

为什么不使用SpringDataREST?&好吧,因为jersey非常受欢迎,不能再说了,因为我以前从未使用过spring数据rest:)好吧,我不想批评你的堆栈。也许这个答案可以帮助你:只是为了确认一下,你使用的是什么JDK版本?我使用的是JDK 8,但我认为,问题在于servlet(jersey完成了这项工作)和Spring之间存在冲突,我另外添加了Spring,看起来,当我尝试使用不带注释组件的类时,Spring并没有“看到”它,但当我添加组件时,春天与泽西相冲突。我想我必须更改我的pom文件,但我不知道如何更改。