REST API如何接收请求正文数据?

时间:2015-06-07 03:58:22

标签: java rest struts2 annotations

我在struts2中使用一个动作将json发布到REST API。

现在发布Jan对象我做如下

  1. 使用JSONObject.fromObject(Object object).toString
  2. 然后使用postmethod.setRequestEntity()
  3. 终于客户端执行post方法
  4. 那么REST API应该如何接收数据呢?

    以下是代码段:

    @POST
        @Path("addUser")
        @Produces("text/plain")
        @Consumes(MediaType.APPLICATION_JSON)
        public String addUser() {
    
        }; 
    

3 个答案:

答案 0 :(得分:1)

  1. 首先我将@XmlRootElement(name="user")添加到我的模型 - 用户
  2. 然后在行动中我将用户转换为xml,当然你应该设置Content-Type", MediaType.APPLICATION_ATOM_XMl

  3. @POST
        @Path("addUser")
        @Produces("text/plain")
        @Consumes(MediaType.APPLICATION_ATOM_XML)
        public String addUser(User user) {}
    
  4. 添加

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    
  5. 到web.xml

    最后你可以得到用户。

答案 1 :(得分:0)

如果我按照自己的想法理解您的问题,要在REST API中接收JSON字符串,您可以使用JAXB。您可以参考以下内容。

REST API

@POST
@Path("addUser")
@Produces("text/plain")
@Consumes(MediaType.APPLICATION_JSON)
public String addUser(Student s) {
    //Your logic here
    return "user added";
}; 

学生的JAXB表示。

public class Student {
    String id;

    String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    String age;

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public Student(String id, String name, String age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Student() {

    }
}

发布Student JSON String时,您将在addUser方法中获取Raw Student对象。如果我的理解是错误的,请纠正我。

答案 2 :(得分:0)

如果你想使用带有jersey和apache-cxf的Rest API(JAX-WS-RS)访问后端代码中的正文部分,那么你需要配置你的其他类包。

  @Path("/student")  //path of rest package of class 
  @Consumes("application/json")  //If you want to consumed produced json
  @Produces("application/json") //If you want to produced json
  public class StudentRest{

     Student student=new Student();

     @GET
     @Path("returnstudent")
     public Student ReturnStudentMethod()
     {
            return student;
     }

     //if you want to receive or produced some specific type then write
     @GET
     @Produced("application/pdf")
     @Path("returnpdffile")
     public Response ReturnPdfFile()
     {
            return file;
     }

}

And also you need to set web.xml if you are using jaxrs with jersey
   <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
   </init-param>