>Java >java지도 시간 >Jersey RESTful 웹 서비스에 엔터티 데이터가 포함된 파일을 업로드하는 방법은 무엇입니까?

Jersey RESTful 웹 서비스에 엔터티 데이터가 포함된 파일을 업로드하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-05 14:10:14827검색

How to Upload Files with Embedded Entity Data in a Jersey RESTful Web Service?

Jersey RESTful 웹 서비스에서 엔터티 데이터가 포함된 파일 업로드

문제:

작업은 직원을 생성하는 것입니다. 단일 REST 호출로 해당 이미지를 업로드하는 동안 기록합니다. 목표는 원활하고 효율적인 방법으로 이 기능을 달성하는 것입니다.

해결책:

이 목표를 달성하려면 여러 콘텐츠가 있다는 점을 이해하는 것이 중요합니다. -동일한 요청의 유형은 지원되지 않습니다. 대신 직원 데이터가 멀티파트 요청의 일부로 포함되어야 합니다.

다음 코드 조각은 이를 달성하는 방법을 보여줍니다.

@POST
@Path("/upload2")
@Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response uploadFileWithData(
    @FormDataParam("file") InputStream fileInputStream,
    @FormDataParam("file") FormDataContentDisposition contentDispositionHeader,
    @FormDataParam("emp") Employee emp) {

    // Business logic

}

여기서 @FormDataParam("emp") 주석은 멀티파트 요청에서 직원 데이터를 추출하는 데 도움이 됩니다. 또한 Employee 클래스는 적절한 getter 및 setter 메소드로 정의되어야 합니다.

멀티파트 테스트:

멀티파트 기능을 테스트하려면 MultiPartFeature 클래스를 레지스터(MultiPartFeature.class)를 사용하는 Jersey 클라이언트입니다. 예를 들어 다음 테스트 조각을 사용할 수 있습니다.

@Test
public void testGetIt() throws Exception {
    
    final Client client = ClientBuilder.newBuilder()
        .register(MultiPartFeature.class)
        .build();
    WebTarget t = client.target(Main.BASE_URI).path("multipart").path("upload2");

    FileDataBodyPart filePart = new FileDataBodyPart("file", 
                                             new File("stackoverflow.png"));
    String empPartJson
            = "{ ... employee data as JSON ... }";

    MultiPart multipartEntity = new FormDataMultiPart()
            .field("emp", empPartJson, MediaType.APPLICATION_JSON_TYPE)
            .bodyPart(filePart);
          
    Response response = t.request().post(
            Entity.entity(multipartEntity, multipartEntity.getMediaType()));
    System.out.println(response.getStatus());
    System.out.println(response.readEntity(String.class));

    response.close();
}

이 테스트는 이미지와 직원 데이터를 모두 포함하는 다중 부분 요청을 생성합니다.

고려 사항:

  • Postman과 같은 일부 클라이언트에서는 개별 본문 부분 콘텐츠 유형 설정을 허용하지 않을 수 있습니다. 그러나 jsonPart.setMediaType(MediaType.APPLICATION_JSON_TYPE);을 사용하여 데이터를 역직렬화하기 전에 Content-Type을 명시적으로 설정할 수 있습니다.
  • 또는 문자열 매개변수를 사용하고 JSON 라이브러리를 사용하여 수동으로 JSON 데이터를 역직렬화할 수 있습니다. .

위 내용은 Jersey RESTful 웹 서비스에 엔터티 데이터가 포함된 파일을 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.