당신이 모든 부분에 대한 인코딩과 콘텐츠 형식을 지정할 수 있습니다 multipart/form-data
를 사용 : 당신은 (적어도 현재 것이 밖으로 상자의 작동해야 모든 부분이 콘텐츠 형식을 추가하는 경우
POST /some-resource HTTP/1.1
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="file"; filename="file1.txt"
Content-Type: text/plain; charset=utf-8
... contents of file1.txt ...
--AaB03x--
을 RESTeasy 버전 3.0.x). 당신은 RESTEasy가 클라이언트와이를 테스트 할 수 있습니다 : 클라이언트가 당신에게 당신이 사용자 정의 헤더에 따라 예를 들어 change the default encoding을 할 수있는 부분 당 콘텐츠 유형을 설정할 수있는 가능성을 제공하지 않는 경우
이
WebTarget target = client.target("/some-resource");
MultipartFormDataOutput formData = new MultipartFormDataOutput();
formData.addFormData("file", fileContent, MediaType.TEXT_PLAIN_TYPE.withCharset("utf-8"));
Entity<MultipartFormDataOutput> entity = Entity.entity(formData, MediaType.MULTIPART_FORM_DATA);
Response response = target.request().post(entity);
(I가 수정 된 코드를 추가 해요 -example PreProcessInterceptor
때문에) @deprecated
을 표시됩니다 : 당신은 일반 HTML 양식을 사용하는 경우
@Provider
public class CharsetFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
String charset = requestContext.getHeaderString("X-Charset");
if (charset != null) {
requestContext.setProperty(InputPart.DEFAULT_CHARSET_PROPERTY, charset);
}
}
}
당신이 양식에 <input type="hidden" name="_charset_" />
을 추가 할 수 있습니다. 클라이언트는 multipart/form-data encoding algorithm에 정의 된대로이 필드를 사용중인 charset으로 채 웁니다. 그런 다음 자신의 ResourceClass에 콘텐츠를 인코딩해야합니다.
@POST
@Path("/form")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response uploadForm(MultipartFormDataInput input) throws IOException {
String charset = input.getFormDataMap().get("_charset_").get(0).getBodyAsString();
InputPart file = input.getFormDataMap().get("file").get(0);
InputStream inputStream = file.getBody(InputStream.class, null);
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, charset));
String line;
StringBuilder content = new StringBuilder();
while ((line = br.readLine()) != null) {
content.append(line);
}
return Response.ok(content).header("Content-Type", MediaType.TEXT_PLAIN_TYPE.withCharset(charset)).build();
}