gpt4 book ai didi

java - 集成spring mvc和Jersey,在查看jersey端点时获取空指针

转载 作者:行者123 更新时间:2023-12-01 15:40:04 25 4
gpt4 key购买 nike

我的简单 Jersey 端点:

@Component
@Path("/v1/user")
public class UserService {

@Autowired
com.myapp.core.service.UserService userService;

@GET
@Path("/get")
public Response getUser() {
User user = userService.getUser(1);

String result = user.getUsername();

return Response.status(200).entity(result).build();
}
}

(顺便说一句,既然这是 RESTful,那么这会是 xml 还是 json 输出??)

我的 spring mvc 页面工作正常(进入 hibernate 状态),但是当我访问 localhost:8080/api/v1/user/get 时我看到:

java.lang.NullPointerException
com.myapp.api.UserService.getUser(UserService.java:30)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name>myapp</display-name>
<description>myapp</description>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/applicationContext.xml
/WEB-INF/spring/myapp-servlet.xml
</param-value>
</context-param>

<servlet>
<servlet-name>myapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/myapp-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


<!-- jersey -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<!--<listener>-->
<!--<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>-->
<!--</listener>-->

<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.myapp.api</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<!-- /jersey -->

</web-app>

我的应用程序上下文有用于以下用途的 bean:

dataSource、sessionFactory 和 userDao。

我的 myapp-servlet.xml 有:

<context:component-scan base-package="com.myapp" />

(applicationContext 和 myapp-servlet.xml 都具有相同的 xml header 节点等,以防出现问题?)

最佳答案

确保您的 myapp-servlet.xml 包含以下内容:

<!--  enable autowire -->
<context:annotation-config />

关于请求/响应的媒体类型 - 您可以明确指定它,如下所示:

@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
@Path("/v1/user")
public class UserService {...

默认值为“*/*” - 任何类型。有关 Jersey 注释的有用信息可以找到 here

关于java - 集成spring mvc和Jersey,在查看jersey端点时获取空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com