使用RestEasy和Wildfly 11

时间:2018-01-12 13:58:22

标签: rest encoding wildfly resteasy

我的上传休息方法正常,除非文件名包含特殊字符

@POST
@Consumes({ MediaType.MULTIPART_FORM_DATA })
public Response uploadFile(MultipartFormDataInput input) {
    Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
    List<InputPart> inputParts = uploadForm.get("file_upload");

    // Do Stuff...

}

文件名为 Test.png ,inputPart.getHeaders()= [Content-Disposition = form-data; NAME = “tws_file”;文件名= “test.png”,内容 - 类型=图像/ PNG] - &GT;的确定

文件名是Döner.png,inputPart.getHeaders()= [Content-Disposition = form-data; NAME = “tws_file”;文件名= “dner.png”,内容 - 类型=图像/ PNG] - &GT; 不行

如您所见,“ö”变为“ ”。

到目前为止我尝试过的事情:

  • 将我的jboss_web.xml 中的默认编码设置为 <default-encoding>UTF-8</default-encoding>(见here
  • 将我的 @Consumes注释更改为@Consumes(MediaType.MULTIPART_FORM_DATA+";charset=UTF-8");(请参阅here
  • 使用requestContext.setProperty(InputPart.DEFAULT_CHARSET_PROPERTY, "UTF-8");更改容器请求过滤器中的编码(请参阅here

似乎没什么用。有任何想法吗 ?我正在使用Wildfly 11和Resteasy-multipart-provider 3.0.24.Final

3 个答案:

答案 0 :(得分:0)

我最终使用了在发送文件名之前使用URI编码器手动编码文件名的解决方法。另一方面,我解码它。这样,特殊字符不再是问题。

Angular的前端:

encodeURI(fileName));

Java中的后端:

URLDecoder.decode(fileName, "UTF-8");

答案 1 :(得分:0)

添加javax.ws.rs.container.ContainerRequestFilter为我解决了这个问题(Wildfly 11.0.0,提供Restrest):

@Provider 
public class CharsetRequestFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        requestContext.setProperty(InputPart.DEFAULT_CHARSET_PROPERTY, "UTF-8");
    }

}

答案 2 :(得分:0)

该问题已在最新版本中修复:https://issues.jboss.org/browse/RESTEASY-1779