Quarkus JAX-RS 서비스 멀티 파트 양식 업로드- "컨텐츠 유형을 사용할 수 없음"

Shadowman

Quarkus를 사용하여 JAX-RS 서비스를 작성하고 있습니다. 내 서비스는 업로드 이미지 파일과 함께 이름, 생년월일 등의 간단한 사용자 프로필을 만들어야합니다. 멀티 파트 양식 업로드로이 작업을 수행하려고하는데 오류가 계속 발생합니다.

내 서비스 정의는 다음과 같습니다.

@Path("/profile")
@POST
@Consumes({MediaType.MULTIPART_FORM_DATA})
@Produces({ MediaType.APPLICATION_JSON })
public Response createStudentProfile(@MultipartForm ProfileFormBean profile);

ProfileFormBean수업은 다음과 같습니다.

public class ProfileFormBean {

    @FormParam("firstName")
    @PartType(MediaType.TEXT_PLAIN)
    private String firstName = null;

    @FormParam("lastName")
    @PartType(MediaType.TEXT_PLAIN)
    private String lastName = null;

    @FormParam("profileImage")
    @PartType(MediaType.APPLICATION_OCTET_STREAM)
    private byte[] profileImage = null;

    ...
}

내가 아는 한, 이것은 내 서비스가 파일 업로드를 수락하기에 충분할 것입니다. 나는 이것을 curl을 사용하여 테스트하려고 시도하고 있지만 그렇게 할 때 예외가 발생합니다. 내 curl 명령은 이름 / 성 속성을 설정하지 않고 파일 자체를 업로드하려고합니다.

curl -vki -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    -H 'Accepts: application/json' \
    -F 'profileImage=@profile_image.jpg' \
    http://localhost:8081/profile

이 명령의 출력은 다음과 같습니다.

curl -vki -H "Authorization: Bearer ${ACCESS_TOKEN}" \
> -H 'Accepts: application/json' \
> -F 'profileImage=@profile_image.jpg' \
> http://localhost:8081/profile
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8081 (#0)
> POST /profile HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.54.0
> Accept: */*
> Authorization: Bearer eyJhbGciOiJSUzI1N...
> Accepts: application/json
> Content-Length: 11701
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------49161ebc82f19511
> 
< HTTP/1.1 415 Unsupported Media Type
HTTP/1.1 415 Unsupported Media Type
< Content-Length: 0
Content-Length: 0

* HTTP error before end of send, stop sending
< 
* Closing connection 0

그리고 이것을 실행하면 서버에서 다음 예외가 표시됩니다.

15:26:35 DEBUG [org.jboss.resteasy.resteasy_jaxrs.i18n] RESTEASY002305: Failed executing POST /profile: javax.ws.rs.NotSupportedException: RESTEASY003065: Cannot consume content type
    at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:453)
    at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:155)
    at org.jboss.resteasy.core.registry.RootNode.match(RootNode.java:58)
    at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:47)
    at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:482)
    at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:323)
    at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:244)
    at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:153)
    at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:363)
    at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:156)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:238)
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:249)
    at io.quarkus.resteasy.runtime.ResteasyFilter.doFilter(ResteasyFilter.java:30)
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:63)
    at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:133)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:65)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:270)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:59)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:116)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:113)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at io.quarkus.undertow.runtime.UndertowDeploymentRecorder$9$1$1.call(UndertowDeploymentRecorder.java:476)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:250)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:59)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:82)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:290)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:669)
    at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:224)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1395)
    at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
    at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
    at java.base/java.lang.Thread.run(Thread.java:830)
    at org.jboss.threads.JBossThread.run(JBossThread.java:479)

내가 뭔가를 놓치고 있습니까? Quarkus 사이트에서 multipart 를 사용 하여 REST 클라이언트만드는 문서를 찾았 지만 서버 측 리소스 에 대한 문서는 없습니다. 이 작업을 수행하기 위해해야 ​​할 일이 더 있습니까?

폴 삼 소다

문제는

@FormParam("profileImage")
@PartType(MediaType.APPLICATION_OCTET_STREAM)
private byte[] profileImage = null;

이 부분에 대해 허용하는 유일한 콘텐츠 유형이라고 광고하고 application/octet-stream있습니다. 그러나 당신은 이미지를 보내고 있으며 cURL은 이미지의 콘텐츠 유형을 설정하지 않습니다. 나는 후드 아래에서 그것을로 설정한다고 상상할 것 image/jpg입니다. 수동으로 유형을 설정할 수 있습니다 (그리고 그 해결됩니다 요청)

profileImage=@profile_image.jpg;type=application/octet-stream

하지만 개인적으로 @PartType. 필드 유형이 이미 byte[]이므로 변환에 문제가 없습니다. 또한 많은 클라이언트가 개별 부품의 콘텐츠 유형을 설정할 수 없습니다. 브라우저 / JS 클라이언트와 마찬가지로 cURL과 마찬가지로 기본적으로 파일의 콘텐츠 유형을 설정합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Jax-RS 멀티 파트 응답

분류에서Dev

$ _FILE [] 멀티 파트 업로드 양식에서 S3로 AWS PHP putObject

분류에서Dev

HttpClient로 멀티 파트 양식 파일 업로드

분류에서Dev

양식 필드를 사용하지 않는 Quarkus 멀티 파트 클라이언트

분류에서Dev

ASP.NET Web API 멀티 파트 양식 데이터 파일 업로드 테스트

분류에서Dev

멀티 파트 / 양식 데이터 업로드-Nodejs-ExpressJS

분류에서Dev

멀티 파트 / 양식 데이터를 사용하여 모바일 앱에서 API로 이미지 업로드

분류에서Dev

Google Apps Script의 UrlFetchApp 업로드 파일 멀티 파트 / 양식 데이터

분류에서Dev

텍스트 필드가있는 멀티 파트 양식 데이터를 외부 API로 보내는 Express 서버

분류에서Dev

멀티 파트 포스트-파일 업로드

분류에서Dev

Android에서 WCF로 멀티 파트 파일 업로드

분류에서Dev

멀티 파트 / 양식 및 청크 인코딩을 모두 사용하여 Spring MVC에서 파일 업로드를 어떻게 받습니까?

분류에서Dev

멀티 파트 양식에서 여러 파일을 첨부 파일로 보내는 방법 [HTTP POST 요청]

분류에서Dev

Apache Bench (ab)로 멀티 파트 / 양식 데이터 게시

분류에서Dev

Vertx에서 멀티 파트 양식 처리

분류에서Dev

노드-멀티 파트 / 양식 데이터 업로드 파일이지만 데이터 없음

분류에서Dev

PUT 요청에 의한 멀티 파트 / 양식 데이터 업로드, okhttp에서 작동하지 않습니까?

분류에서Dev

Swift에서 중첩 된 JSON 매개 변수를 사용하여 멀티 파트 양식 데이터를 업로드하려면 어떻게해야합니까?

분류에서Dev

JAX-RS-jar 파일에서 @Provider 클래스로드

분류에서Dev

Google App Engine으로 멀티 파트 / 양식 파일을 업로드하는 방법은 무엇입니까?

분류에서Dev

멀티 파트 업로드 요청에 구현해서 ProgressDialog

분류에서Dev

AWS 멀티 파트 업로드 서명 DoesNotMatch

분류에서Dev

자바에서 이미지의 멀티 파트 업로드

분류에서Dev

멀티 파트 / 양식 데이터 요청-pdf를 업로드하면 빈 파일이 생성됨

분류에서Dev

Python을 사용하여 POST 멀티 파트 양식 데이터를 통해 파일 업로드

분류에서Dev

Guzzle PHP를 사용하여 멀티 파트 / 양식 데이터 업로드에 s3 파일 사용

분류에서Dev

멀티 파트 / 양식 데이터로 페이스 북 사진을 게시하는 방법

분류에서Dev

AngularJS : 사진을 멀티 파트 양식 데이터로 업로드 및 게시하고 응답 받기

분류에서Dev

라이브러리 Afnetworking 멀티 파트에서 비디오 업로드

Related 관련 기사

  1. 1

    Jax-RS 멀티 파트 응답

  2. 2

    $ _FILE [] 멀티 파트 업로드 양식에서 S3로 AWS PHP putObject

  3. 3

    HttpClient로 멀티 파트 양식 파일 업로드

  4. 4

    양식 필드를 사용하지 않는 Quarkus 멀티 파트 클라이언트

  5. 5

    ASP.NET Web API 멀티 파트 양식 데이터 파일 업로드 테스트

  6. 6

    멀티 파트 / 양식 데이터 업로드-Nodejs-ExpressJS

  7. 7

    멀티 파트 / 양식 데이터를 사용하여 모바일 앱에서 API로 이미지 업로드

  8. 8

    Google Apps Script의 UrlFetchApp 업로드 파일 멀티 파트 / 양식 데이터

  9. 9

    텍스트 필드가있는 멀티 파트 양식 데이터를 외부 API로 보내는 Express 서버

  10. 10

    멀티 파트 포스트-파일 업로드

  11. 11

    Android에서 WCF로 멀티 파트 파일 업로드

  12. 12

    멀티 파트 / 양식 및 청크 인코딩을 모두 사용하여 Spring MVC에서 파일 업로드를 어떻게 받습니까?

  13. 13

    멀티 파트 양식에서 여러 파일을 첨부 파일로 보내는 방법 [HTTP POST 요청]

  14. 14

    Apache Bench (ab)로 멀티 파트 / 양식 데이터 게시

  15. 15

    Vertx에서 멀티 파트 양식 처리

  16. 16

    노드-멀티 파트 / 양식 데이터 업로드 파일이지만 데이터 없음

  17. 17

    PUT 요청에 의한 멀티 파트 / 양식 데이터 업로드, okhttp에서 작동하지 않습니까?

  18. 18

    Swift에서 중첩 된 JSON 매개 변수를 사용하여 멀티 파트 양식 데이터를 업로드하려면 어떻게해야합니까?

  19. 19

    JAX-RS-jar 파일에서 @Provider 클래스로드

  20. 20

    Google App Engine으로 멀티 파트 / 양식 파일을 업로드하는 방법은 무엇입니까?

  21. 21

    멀티 파트 업로드 요청에 구현해서 ProgressDialog

  22. 22

    AWS 멀티 파트 업로드 서명 DoesNotMatch

  23. 23

    자바에서 이미지의 멀티 파트 업로드

  24. 24

    멀티 파트 / 양식 데이터 요청-pdf를 업로드하면 빈 파일이 생성됨

  25. 25

    Python을 사용하여 POST 멀티 파트 양식 데이터를 통해 파일 업로드

  26. 26

    Guzzle PHP를 사용하여 멀티 파트 / 양식 데이터 업로드에 s3 파일 사용

  27. 27

    멀티 파트 / 양식 데이터로 페이스 북 사진을 게시하는 방법

  28. 28

    AngularJS : 사진을 멀티 파트 양식 데이터로 업로드 및 게시하고 응답 받기

  29. 29

    라이브러리 Afnetworking 멀티 파트에서 비디오 업로드

뜨겁다태그

보관