Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/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 rest服务中的固定名称';s输入参数_Java_Json_Rest_Jax Rs_Cxf - Fatal编程技术网

Java rest服务中的固定名称';s输入参数

Java rest服务中的固定名称';s输入参数,java,json,rest,jax-rs,cxf,Java,Json,Rest,Jax Rs,Cxf,我通过Jax-RS和CXF实现了restweb服务 @Path("/StudentServices") @Produces({"application/json"}) public class Student { @POST @Path("/save") public String persist(@QueryParam("StudentName") String name, @QueryParam("StudentAg

我通过Jax-RSCXF实现了restweb服务

@Path("/StudentServices")
@Produces({"application/json"})
public class Student
{
    @POST
    @Path("/save")
    public String persist(@QueryParam("StudentName") String name,
                          @QueryParam("StudentAge") String age)
    {
        System.out.println("*******************************");
        System.out.println("  Incomming student with = " + name + "    " + age);
        System.out.println("*******************************");
        return "Hello " + name;
    }
}
实际上,我想用url调用该服务:
localhost:9000/StudentServices/save
正文消息为JSON:{“StudentName”:“John”,“StudentAge”:“30”}

但当请求到达persist方法时,其输入为null或空。我用其他一些方法进行了检查,比如Jackson注释,JAXB注释,但没有人能正确工作


此外,当我的服务具有输入基元类型和字符串时,我想修复参数的名称,因为当我使用类进行输入时,它工作正常。

您将参数定义为
QueryParam
,这意味着JAX-RS希望它们作为添加到url的参数,例如,
localhost:9000/StudentServices/save?StudentName=John&StudentAge=30

您想要的是数据在主体中发送。因此,您可以定义一个简单的POJO:

public class Student {
    private String StudentName;
    private int StudentAge;

    // getters and setters
}
并将其用作JAX-RS方法中的参数:

@POST
@Path("/save")
public String persist(Student student) {
    System.out.println("*******************************");
    System.out.println("  Incomming student with = " + student.getStudentName() + "    " + student.getStudentAge());
    System.out.println("*******************************");
    return "Hello " + student.getStudentName();
}

JAXB提供程序正在将您的主体数据(JSON)转换为相应的POJO,您可以通过getter访问数据。

您将参数定义为
QueryParam
,这意味着JAX-RS希望它们作为添加到url中的参数,例如,
localhost:9000/StudentServices/save?StudentName=John&StudentAge=30

您想要的是数据在主体中发送。因此,您可以定义一个简单的POJO:

public class Student {
    private String StudentName;
    private int StudentAge;

    // getters and setters
}
并将其用作JAX-RS方法中的参数:

@POST
@Path("/save")
public String persist(Student student) {
    System.out.println("*******************************");
    System.out.println("  Incomming student with = " + student.getStudentName() + "    " + student.getStudentAge());
    System.out.println("*******************************");
    return "Hello " + student.getStudentName();
}

JAXB提供程序正在将主体数据(JSON)转换为相应的POJO,您可以通过getter访问数据。

您不能使用@QueryParam读取请求主体

正如@QueryParam文档中所指定的,它将HTTP查询参数的值绑定到资源方法参数、资源类字段或资源类bean属性。值是URL解码的,除非使用编码注释禁用此功能。因此,如果您像下面这样转发请求,您现有的代码应该可以工作:

localhost:9000/StudentServices/save?StudentName=John& StudentAge=30
现在,如果您想要接受json请求,那么必须创建seprateJavaBean

@XmlRootElement
public class StudentRequest {
  private String studentName;
  private int studentAge;

  // getter and setter
}
在你的控制器里。(即学生)


还可以在方法级别指定生成或使用注释。它提供了从其他方法返回其他内容类型的灵活性。

您不能使用@QueryParam来读取请求主体

正如@QueryParam文档中所指定的,它将HTTP查询参数的值绑定到资源方法参数、资源类字段或资源类bean属性。值是URL解码的,除非使用编码注释禁用此功能。因此,如果您像下面这样转发请求,您现有的代码应该可以工作:

localhost:9000/StudentServices/save?StudentName=John& StudentAge=30
现在,如果您想要接受json请求,那么必须创建seprateJavaBean

@XmlRootElement
public class StudentRequest {
  private String studentName;
  private int studentAge;

  // getter and setter
}
在你的控制器里。(即学生)


还可以在方法级别指定生成或使用注释。它提供了从其他方法返回其他内容类型的灵活性。

谢谢。你的意思是没有其他方法来定义POJO吗?谢谢。你的意思是没有其他方法来定义POJO吗?谢谢。您的意思是没有其他方法定义POJO吗?您可以使用
javax.json.JsonObject
作为泛型类:
public String persist(JsonObject data)
并使用其方法之一,如
.getString(“StudentName”)访问数据
以字符串形式获取StudentName的JSON数据。我无法使用public
字符串持久化(JsonObject数据)
,因为当我发送请求时,服务器抛出异常:
javax.ws.rs.WebApplicationException:HTTP 415不支持的媒体类型
。我的方法签名是:`@POST@Path(“/call2”)public void call(javax.json.JsonObject json)`Add
@Consumes(MediaType.APPLICATION\u json)
到方法中。您是否将客户端代码中的
内容类型
头设置为“APPLICATION/json”?否则,它可能会自动解释为
应用程序/x-www-form-urlencoded
多部分/表单数据
。谢谢。您的意思是没有其他方法定义POJO吗?您可以使用
javax.json.JsonObject
作为泛型类:
public String persist(JsonObject data)
并使用其方法之一,如
.getString(“StudentName”)访问数据
以字符串形式获取StudentName的JSON数据。我无法使用public
字符串持久化(JsonObject数据)
,因为当我发送请求时,服务器抛出异常:
javax.ws.rs.WebApplicationException:HTTP 415不支持的媒体类型
。我的方法签名是:`@POST@Path(“/call2”)public void call(javax.json.JsonObject json)`Add
@Consumes(MediaType.APPLICATION\u json)
到方法中。您是否将客户端代码中的
内容类型
头设置为“APPLICATION/json”?否则,它可能会自动解释为
应用程序/x-www-form-urlencoded
多部分/表单数据