Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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-POST方法_Java_Rest_Post - Fatal编程技术网

Java中的REST-POST方法

Java中的REST-POST方法,java,rest,post,Java,Rest,Post,下面是我的宁静服务: @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response add(Student student) { if (service.add(student)) { return Response.status(200).entity(student).build(); } else { retu

下面是我的宁静服务:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response add(Student student) {
    if (service.add(student)) {
        return Response.status(200).entity(student).build();
    } else {
        return Response.status(500).entity("Error").build();
    }
}
以及该服务的使用:

public static void createStudent(String studentJsonString) {
    try {
        // priprema i otvaranje HTTP zahtjeva
        URL url = new URL(BASE_URL);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST"); // 
        conn.setRequestProperty("Content-Type", "application/json");
        // podaci za body dio zahtjeva
        JSONObject input = new JSONObject(studentJsonString);
        // slanje body dijela
        OutputStream os = conn.getOutputStream();
        os.write(input.toString().getBytes());
        os.flush();
        // @problem line
        if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
        }

        os.close();
        conn.disconnect();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但是,如果我对获取响应代码的行进行注释,服务器端不会进入add方法,为什么?输出流总是被刷新和关闭,为什么我需要阅读响应来“激活”服务?

引用文档,即基类的javadoc:

通常,创建到URL的连接是一个多步骤的过程:

  • 连接对象是通过调用URL上的
    openConnection
    方法创建的
  • 操作设置参数和常规请求属性
  • 使用
    connect
    方法进行与远程对象的实际连接。
  • 远程对象变为可用。可以访问远程对象的标题字段和内容
在调用
connect
之前,请求不会发送到服务器

任何需要响应的方法调用都将自动为您调用
connect
,如方法中所述:

URLConnection对象经历两个阶段:首先创建它们,然后连接它们。在创建之后和连接之前,可以指定各种选项(例如,
doInput
UseCaches
)。连接后,尝试设置它们是错误的依赖于连接的操作,如
getContentLength
,将在必要时隐式执行连接。


引用文档,即基类的javadoc:

通常,创建到URL的连接是一个多步骤的过程:

  • 连接对象是通过调用URL上的
    openConnection
    方法创建的
  • 操作设置参数和常规请求属性
  • 使用
    connect
    方法进行与远程对象的实际连接。
  • 远程对象变为可用。可以访问远程对象的标题字段和内容
在调用
connect
之前,请求不会发送到服务器

任何需要响应的方法调用都将自动为您调用
connect
,如方法中所述:

URLConnection对象经历两个阶段:首先创建它们,然后连接它们。在创建之后和连接之前,可以指定各种选项(例如,
doInput
UseCaches
)。连接后,尝试设置它们是错误的依赖于连接的操作,如
getContentLength
,将在必要时隐式执行连接。


但是,即使在刷新之后添加conn.connect()行,也不会调用该服务。根据,只有在调用这些方法之后才会进行提交。这毫无意义,但事实就是这样。但即使我在刷新之后添加了conn.connect()行,也不会调用该服务。根据,只有在调用这些方法之后才会进行提交。这毫无意义,但事实就是这样。