【问题标题】:Unable to consume Jersey Webservice无法使用 Jersey Webservice
【发布时间】:2015-07-07 00:11:44
【问题描述】:

我尝试使用邮递员使用 Jersey-2 网络服务。在我的网络服务下方

    @Path("UserService")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public class UserService {

        @POST
        @Path("/getUser")
        public Utilisateur getUser(@FormParam("identitifiant")String identifiant,@FormParam("password") String password)  {   

            UtilUtilisateur myUser = null;
            try {   
                myUser = requestUser(identifiant, password);

            } catch (Exception t) {

                log(t);
            } 
            return myUser;
        } 

在我的 web.xml 文件下面

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Rest</display-name>

    <context-param>
        <param-name>flex.class.path</param-name>
        <param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>
    </context-param>

    <!-- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>


    <!-- WebService Servlet -->
    <servlet>
        <servlet-name>EmagREST</servlet-name>
        <servlet-class>
            org.glassfish.jersey.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>org.glassfish.jersey.config.property.packages</param-name>
            <param-value>com.ed.eMagMoney.services</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>EmagREST</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>

我尝试在我的 URL 下方使用 postman 和 post 参数获取用户

http://localhost:8080/jersey/rest/UserService/getUser

但作为回报我有

<html>
    <head>
        <title>Apache Tomcat/6.0.16 - Rapport d'erreur</title>
        <style>
            <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}-->
        </style>
    </head>
    <body>
        <h1>Etat HTTP 404 - Not Found</h1>
        <HR size="1" noshade="noshade">
            <p>
                <b>type</b> Rapport d'état
            </p>
            <p>
                <b>message</b>
                <u>Not Found</u>
            </p>
            <p>
                <b>description</b>
                <u>La ressource demandée (Not Found) n'est pas disponible.</u>
            </p>
            <HR size="1" noshade="noshade">
                <h3>Apache Tomcat/6.0.16</h3>
            </body>
        </html>

我不明白为什么,我该如何解决?

【问题讨论】:

  • 使用称为“邮递员”的 Google chrome 扩展程序,它会通过发出 POST 调用来帮助您使用网络服务

标签: java web-services jax-rs jax-ws jersey-2.0


【解决方案1】:
  1. 确保在您的项目中具有以下所有依赖项: -jersey-container-servlet-core -jersey-media-json-处理 -jersey-media-json-jackson

  2. 为您的 REST Web 服务创建一个配置类,您还可以在这些类中加载您的包以通过球衣进行扫描,而不是在 web.xml 中

    import org.glassfish.jersey.jackson.JacksonFeature;
    import org.glassfish.jersey.server.ResourceConfig;
    
    public class Application extends ResourceConfig {
    
     public Application(){
     packages("com.package.of.your.resources").
     register(JacksonFeature.class);
     }
    }
    
  3. 不要忘记将以下注解 @XmlRootElement 添加到您的 DAO 类中

  4. 另外,在你的服务方法中,没有必要添加/(斜杠)。因为路径是相对的@Path('getUser')就够了。

【讨论】:

    【解决方案2】:

    您必须使用 POST 访问您的资源,因为您使用 @POST 注释您的方法。

    如果您在浏览器中输入 URL http://localhost:8080/jersey/rest/UserService/getUser,则将执行 GET,并且找不到具有给定名称和 GET 作为动词的资源。

    您必须为您的浏览器创建一个客户端或获取一个插件来测试 REST 服务。

    【讨论】:

    • 我通过 post 访问我的资源,并通过邮递员以 json 格式发送参数:{"identitifiant":"9999999","password":"6666666"}
    • @FormParam 是否用于访问 Json 内容?我以为@FormParam 是用于表单参数...
    • 即使使用表单参数,我也有相同的错误 404。我认为,我的 jerser-server 没有启动,而我在 web.xml 中启动时加载它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多