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()行,也不会调用该服务。根据,只有在调用这些方法之后才会进行提交。这毫无意义,但事实就是这样。