gpt4 book ai didi

java - 在 Java 中将对象发布到 REST Web 服务

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:05 24 4
gpt4 key购买 nike

我正在编写一个 Java 应用程序,我想通过 RESTful Web 服务添加事件。当我尝试从客户端应用程序添加事件时,出现以下异常:

INFO: Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the HTTP protocol
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:517)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:291)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Unknown Source)

但是当我从浏览器调用相同的 URL 时,如果我添加注释 @GET,它会起作用,但如果我添加注释 @PUT 或 @POST 而不是 @GET,我会得到 405 状态代码。我在 Web 服务方法中更改了这些注释。我想知道可能是什么导致了这个问题,因为它在浏览器中工作正常,但在从客户端应用程序调用时抛出异常。

这是 REST 服务上的方法:

@POST
@Path("/add/{name}/{start}/{end}/{location}/{category}/{description}")
@Produces(MediaType.APPLICATION_JSON)
public Response addEvent(@PathParam("name") String name,@PathParam("start") String startStr,@PathParam("end") String endStr,
@PathParam("location") String location,@PathParam("category") String category,@PathParam("description") String description) {
System.out.println(name);
LocalDateTime start=service.parseLocalDateTime(startStr);
LocalDateTime end=service.parseLocalDateTime(endStr);
Event event=new Event(name,start,end,location,category,description,false);
if(service.addEvent(event)) {
return Response.status(200).build();
}
return Response.status(500).entity("Error in event adding.").build();
}

这是我的客户端方法:

public void addEvent(Event event) {
String baseUrl="http://localhost:8080/InfoEvent/api/events/";
StringBuilder sb=new StringBuilder();
sb.append(event.getName());
sb.append("/");
sb.append(event.getStart());
sb.append("/");
sb.append(event.getEnd());
sb.append("/");
sb.append(event.getLocation());
sb.append("/");
sb.append(event.getCategory());
sb.append("/");
sb.append(event.getDescription());
String parameter=sb.toString();
String stringURL=baseUrl+"add/"+parameter;
System.out.println(stringURL);
try {
URL url = new URL(stringURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStream os = conn.getOutputStream();
// os.write("");
os.flush();
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new RuntimeException("Failed-greskaa : HTTP error code : " + conn.getResponseCode());
}
os.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}

我也尝试过更改客户端方法中的注释,同时也在Web服务方法中更改它,但没有帮助。

最佳答案

我没有资格发表评论,

由于异常显示“解析 HTTP header 时出错”和“HTTP 协议(protocol)中的无效字符”,因此服务器似乎无法理解该请求。

这里的答案表明它可能与 HTTPS 与 HTTP 有关。 java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens .

关于java - 在 Java 中将对象发布到 REST Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com