有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java泽西请求。getInputStream()

@POST
@Path("/getphotos")
@Produces(MediaType.TEXT_HTML)
public String getPhotos() throws IOException{
    BufferedReader rd = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));
    String line;
    while ((line = rd.readLine()) != null) {
        System.out.println(line);
    }
    return "ok";        
}

上面的代码是针对我的服务器的。 但在这段代码中,字符串“line”没有值。(总是) 代码有问题吗


客户端代码

    String message = "message";
    URL url = new URL(targetURL);
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

    urlConnection.setDoInput(true);
    urlConnection.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream());
    wr.write(message);

共 (1) 个答案

  1. # 1 楼答案

    只要对实际的HttpServletRequest有一个有效的句柄,您就可以在Jersey中手动使用请求的数据。另一方面,请记住,您只能使用请求正文一次

    @Context
    private HttpServletRequest request;
    
    @POST
    @Path("/")
    public Response consumeRequest() {
        try {
            final BufferedReader rd = new BufferedReader(new InputStreamReader(
                    request.getInputStream(), "UTF-8"));
    
            String line = null;
            final StringBuffer buffer = new StringBuffer(2048);
    
            while ((line = rd.readLine()) != null) {
                buffer.append(line);
            }
            final String data = buffer.toString();
            return Response.ok().entity(data).build();
        } catch (final Exception e) {
            return Response.status(Status.BAD_REQUEST)
                    .entity("No data supplied").build();
        }
    }
    

    旁注:像Apache Commons IO这样的库为读取IO数据提供了强大的功能