Code: Select all
@POST
@Path("/v1/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload (
@FormDataParam("file")
InputStream file,
@FormDataParam("file")
FormDataContentDisposition disposition) {
return Response.ok().build();
}
< /code>
Sobald eine Anforderung eingeht (siehe unten), sendet Tomcat oder Jersey eine 400 schlechte Anfrage-Antwort zurück, bevor sie überhaupt in die Endpunktmethode eingeht. Das einzige, was an ein Tomcat-Protokoll geschrieben wurde, ist im allgemeinen "Access_log", in dem ein Protokolleintrag über die Endpunktanforderungs-URL und den Antwortcode von 400 eingefügt wird. Ich habe alle anderen Tomcat-Protokolle überprüft, und es gibt keine anderen Protokolleinträge, die irgendwo beschreiben, warum eine 400 zurückgegeben wird. Antwort: < /p>
Der Server kann die Anforderung aufgrund von etwas, das als Client -Fehler wahrgenommen wird, nicht verarbeitet oder nicht (z. B. fehlerhafte Anforderungssyntax, ungültige Anforderungsnachrichtframing oder Täuschungsanforderung Routing).POST http://localhost//v1/upload?_=1744409038175&cid=m9dc0kkulvrjar8sxgl&tkn=974016a9-5a49-45d4-98c9-dba380735578 HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 717939
sec-ch-ua-platform: "Windows"
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
Accept: application/json, text/plain, */*
sec-ch-ua: "Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
Content-Type: multipart/form-data
sec-ch-ua-mobile: ?0
Origin: http://localhost
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost//
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: en-US,en-GB;q=0.9,en;q=0.8
Cookie:
------WebKitFormBoundarydDDQsAC7Rqf3IM5I
Content-Disposition: form-data; name="file"; filename="Sample file.pdf"
Content-Type: application/pdf
----WebKitFormBoundarydDDQsAC7Rqf3IM5I--
< /code>
Wenn ich die Signatur der Endpunktmethode ändere (d. H. Um die @FormDataparam-Annotationen zu entfernen und nur 1 InputStream-Parameter zu haben), in Folgendes: < /p>
@POST
@Path("/v1/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload (
InputStream file) {
return Response.ok().build();
}
< /code>
Die oben genannte wird funktionieren und Tomcat sendet keine 400 zurück. Ich kann jedoch keine anderen Methodenparameter definieren oder die @FormDataparam -Annotation verwenden. Tatsächlich bekomme ich bei der obigen Methode Signature, wenn ich die obige InputStream -Datei
org.glassfish.jersey
jersey-bom
3.1.10
pom
import
org.glassfish.jersey.containers
jersey-container-servlet-core
org.glassfish.jersey.containers
jersey-container-servlet
org.glassfish.jersey.inject
jersey-hk2
org.glassfish.jersey.media
jersey-media-json-binding
org.glassfish.jersey.media
jersey-media-multipart
org.glassfish.jaxb
jaxb-runtime
4.0.5
...
< /code>
Tatsächlich scheint es, dass jederzeit die @FormDataparam -Annotation verwendet wird, eine 400 -Antwort.
