使用 Jersey 和 JAX-RS 进行 POST 上传时换行符丢失

Ste*_*Kuo 2 java rest jax-rs jersey

我正在使用 Jersey 和 JAX-RS 来实现 REST POST 端点。实际的 servletweb.xmlcom.sun.jersey.spi.spring.container.servlet.SpringServlet. 然后,我使用 JAX-RS 来注释我的端点:

  @POST
  @Path("foo")
  public Response foo(Reader input) throws IOException {
    BufferedReader lineReader = new BufferedReader(input);
    String line;
    while ((line = lineReader.readLine()) != null) {
      System.out.println(line);
    }

    return Response.ok("{}", MediaType.APPLICATION_JSON).build();
  }
Run Code Online (Sandbox Code Playgroud)

当我到达端点并提供一个文本文件时,换行符会丢失,并且会作为一行读入。例子:

line 1
line 2
line 3
Run Code Online (Sandbox Code Playgroud)

打印出:

line 1line 2line 3
Run Code Online (Sandbox Code Playgroud)

我尝试使用注释@Consumes("text/plain")并将请求标头设置为,Content-Type:text/plain但这没有帮助。为什么换行序列被删除?

Ste*_*Kuo 5

我正在使用curl上传,这显然删除了换行符

curl -v -X POST -d @input.txt http://localhost/foo
Run Code Online (Sandbox Code Playgroud)

使用--data-binary代替解决了问题。

curl -v -X POST --data-binary @input.txt http://localhost/foo
Run Code Online (Sandbox Code Playgroud)