Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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将对象传递给REST Web资源_Java_Jersey_Jax Rs - Fatal编程技术网

Java 如何使用Jersey将对象传递给REST Web资源

Java 如何使用Jersey将对象传递给REST Web资源,java,jersey,jax-rs,Java,Jersey,Jax Rs,我是webservice中的新bie。请帮助我。我正在尝试使用Jersey实现将一个对象传递到webresource。但我遇到了错误 "HTTP Status 405" and description is "The specified HTTP method is not allowed for the requested resource ()." 我提到了下面的对象,web资源方法,Html页面 果豆:- @XmlRootElement(name="fruitbean")

我是webservice中的新bie。请帮助我。我正在尝试使用Jersey实现将一个对象传递到webresource。但我遇到了错误

"HTTP Status 405" and description is "The specified HTTP method is not allowed for the requested resource ()."
我提到了下面的对象,web资源方法,Html页面

果豆:-

    @XmlRootElement(name="fruitbean")
    public class FruitBean {
        private long id;
        private String name;
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
   }
@XmlRootElement(name="fruitbean")
public class FruitBean {


    private long id;

    private String name;
    @XmlAttribute
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    @XmlAttribute
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
水果店服务:-

@Path("fruitstore")
public class FruitStore {

    @PUT
    @Path("checkIDByObject")
    @Consumes("application/xml")
    public void loadObject(FruitBean bean){
        System.out.println("====================");
        System.out.println("Fruit ID"+bean.getId()+" Name"+bean.getName());

    }
}
Index.htm:-

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test Jax-RS Object</title>
</head>
<body>
<form action="services/fruitstore/checkIDByObject" method="POST">
<table>
<tr>
    <td>ID:</td>
    <td><input type="text" name="id"></td>
</tr>
<tr>
    <td>Name:</td>
    <td><input type="text" name="name"></td>
</tr>
<tr>

    <td><input type="submit" Value="Submit"></td>
</tr>
</table>


</form>
</body>
</html>
果豆:-

    @XmlRootElement(name="fruitbean")
    public class FruitBean {
        private long id;
        private String name;
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
   }
@XmlRootElement(name="fruitbean")
public class FruitBean {


    private long id;

    private String name;
    @XmlAttribute
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    @XmlAttribute
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
Index.html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test Jax-RS Object</title>
</head>
<body>
<form action="services/fruitstore/checkIDByObject" method="POST" enctype="application/x-www-form-urlencoded">
<table>
<tr>
    <td>ID:</td>
    <td><input type="text" name="id"></td>
</tr>
<tr>
    <td>Name:</td>
    <td><input type="text" name="name"></td>
</tr>
<tr>

    <td><input type="submit" Value="Submit"></td>
</tr>
</table>


</form>
</body>
</html>

测试Jax-RS对象
身份证件:
姓名:
我在控制台里看到下面的消息

严重:Java类型的消息体读取器,类 com.service.fruitstore.FruitBean和MIME媒体类型, 找不到应用程序/x-www-form-urlencoded


请帮助我,您没有向控制器发送xml。检查

水果豆:向getter或字段添加注释

编辑: 您可以使用

编辑2:

@Path("fruitstore")
public class FruitStore {

  @POST
  @Path("/checkobjectbyid")
  @Consumes(MediaType.APPLICATION_XML)
  public void loadObject(FruitBean bean) {
    System.out.println("====================");
    System.out.println("Fruit ID" + bean.getId() + " Name" + bean.getName());
  }

  @GET
  @Path("/fruitbean")
  @Produces(MediaType.APPLICATION_XML)
  public Response getFruitBean(){
    FruitBean fruitBean = new FruitBean();
    fruitBean.setId(1L);
    fruitBean.setName("name of fruitbean");
    return Response.status(Response.Status.OK).entity(fruitBean).build();
  }
}
路径使用小写字符。(url为小写)

使用正确的消费和生成注释

<servlet>
  <servlet-name>ServletAdaptor</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>ServletAdaptor</servlet-name>
  <url-pattern>/resources/*</url-pattern>
</servlet-mapping>
使用rest客户端进行测试

URL: http://localhost:8080/PROJECTNAME/resources/fruitstore/checkobjectbyid

METHOD: POST

CONTENT-TYPE: application/xml

CHARSET: UTF-8

BODY: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><fruitbean id="1" name="name of fruitbean"/>
URL:http://localhost:8080/PROJECTNAME/resources/fruitstore/checkobjectbyid
方法:邮寄
内容类型:应用程序/xml
字符集:UTF-8
正文:

首先:在您的
index.htm
method=“POST”
和web服务代码中:
@PUT
。那么这不是一个表单操作-这只是您请求的一个主体。尝试使用rest cliet作为Err或a。

我也遇到了同样的问题。然而,我用了另一种方式。 我使用了
@FormParam
注释,而不是传入对象(这会更容易,不过,我也是为了学习而这样做的)

HTML

<form action="../{projectname}/{rest}/{resource}/findByIdOrName" action="post">
    <label>id</label>
    <input type="text" name="id" />
    <label>name</label>
    <input type="text" name="name" />
    <input type="submit" value="Find" />
</form>

我就是这样做的,很简单,很有效。至于模特,我真的不知道。。我更喜欢C#.NET,我正在努力学习Java。

谢谢。我按照您指定的url进行操作。但我仍然得到了“HTTP状态415--服务器拒绝了此请求,因为请求实体的格式不受请求方法()的请求资源的支持”。请帮助我礼貌地提及拒绝投票的原因。
@Path("/resource")
public class resource {

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Path("findByIdOrName")
    public void findByIdOrName (@FormParam("id") int id, 
                                @FormParam("name") String name) {
        System.out.println("=======");
        System.out.println("id: " + id + " name:" + name);
    }
}