Включение аннотаций @formdataparam приводит к 400 плохим запросу (Jersey 3.1.10, Java 17, Tomcat 10) для запросов MultipJAVA

Программисты JAVA общаются здесь
Anonymous
Включение аннотаций @formdataparam приводит к 400 плохим запросу (Jersey 3.1.10, Java 17, Tomcat 10) для запросов Multip

Сообщение Anonymous »

Я искал уже несколько часов/дни и еще не нашел решение. Я только что добавил новую конечную точку для загрузки файлов. Ресурс метода конечной точки в настоящее время определяется как (для простого тестирования ответа на конечную точку): < /p>

Код: Выделить всё

    @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>
Как только запрашивается запрос (образец, показанный ниже), Tomcat или Jersey отправляет обратный ответ 400 плохой запросы, прежде чем даже вступить в метод конечной точки. Единственная вещь, записанная в любом журнале Tomcat, заключается в общем «Access_log», где он вставляет запись в журнале о URL-адресе запроса конечной точки и коде ответа 400. Я проверил все другие журналы Tomcat, и нигде нет других записей журнала, которые описывают, почему 400 возвращается. < /P>
Возвращает 400, что, кажется, в ответ «Один», который, кажется, является «Один», который, кажется, в «Один», который, кажется, является «Один», который, кажется, является «Один», который, кажется, является «Один», который, кажется, является «Один», который, кажется, является «Один», который, кажется, является «Один», который, кажется, является «Один», который, кажется, является «В целом», который, кажется, в «Один», который, кажется, является «Один». Ответ: < /p>
Сервер не может или не будет обрабатывать запрос из -за чего -то, что воспринимается как ошибка клиента (например, синтаксис неверного запроса, неверный образец запроса или обманчивый запрос).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>
Если я изменяю сигнатуру метода конечной точки (то есть, чтобы удалить аннотации @formdataparam и иметь только 1 параметр inputstream) к следующему: < /p>
    @POST
@Path("/v1/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload (
InputStream file) {

return Response.ok().build();
}
< /code>
выше будет работать, и Tomcat не отправит обратно 400. Однако я не могу определить какие -либо другие параметры метода или использовать аннотацию @formdataparam. На самом деле, с приведенной выше подписью метода, если бы я добавил параметр @formdataparam ("file") 
в приведенный выше файл inputstream , то я снова получу 400. Я не понимаю, что здесь идет не так, и я не получаю достаточно информации о журнале, чтобы определить, почему!



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>
На самом деле, кажется, что в любое время используется аннотация @formdataparam, возникает ответ 400. :)

Подробнее здесь: https://stackoverflow.com/questions/795 ... jersey-3-1

Вернуться в «JAVA»