Java,JBOSS,接受具有西班牙口音的MULTIPART_FORM_DATA和JSON

时间:2016-04-04 15:05:19

标签: java json rest jboss resteasy

从REST google api我发送邮件Content-Type: application/x-www-form-urlencoded

------WebKitFormBoundary
Content-Disposition: form-data; name="model"
Content-type: application/json

{
    "placeId":2,
    "reportDate":"2016-03-10T05:00:00.000Z",
    "form":{
     "apply" :"NO",
 "microbasin": {
    "id": 1,
    "name": "Caño Rubiales"
    }
  }
}
------WebKitFormBoundary--

在我的方法中,我消耗:

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response create (@Context UriInfo uriInfo,
                            @Context HttpServletRequest req,
                            MultipartFormDataInput input) throws IOException
    {


        List<InputPart> l = input.getFormDataMap().get("model");

        String str = new String (l.get(0).getBodyAsString().getBytes("iso-8859-1"), "UTF-8");

        System.out.println(str);

        InputStream file = input.getFormDataPart("file", new GenericType<InputStream>() {});

        return null;
    }

因此Caño的收到符号为Caýýo。我已尝试了很多选项,包括所有编码类型,但没有成功。有人可以帮助我,或者给我一些关于如何用一个正确的符号接受文件和json的建议。

1 个答案:

答案 0 :(得分:0)

2天后我解决了这个问题。

在我的pom中,我将依赖项更新为:

   <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
        <version>2.3.5.Final</version>
        <scope>provided</scope>
    </dependency>

然后我创建了这个类。

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.Provider;

import org.jboss.resteasy.annotations.interception.ServerInterceptor;
import org.jboss.resteasy.core.ResourceMethod;
import org.jboss.resteasy.core.ServerResponse;
import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.spi.Failure;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.spi.interception.PreProcessInterceptor;

@Provider
@ServerInterceptor
public class ChilaPreProcessInterceptor implements PreProcessInterceptor
{
    @Override
    public ServerResponse preProcess (HttpRequest request,
                                      ResourceMethod resourceMethod)
            throws Failure, WebApplicationException
    {
        request.setAttribute(InputPart.DEFAULT_CONTENT_TYPE_PROPERTY, "*/*; charset=UTF-8");
        return null;
    }
}

方法:

        public String getBodyPartAsString (List<InputPart> parts) throws IOException
    {
               InputPart part = parts.get(0);
               String value = part.getBody(String.class, null);

        return value;
    }

        @POST
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        public Response create (@Context UriInfo uriInfo,
                                @Context HttpServletRequest req,
                                MultipartFormDataInput input) throws IOException, ParseException
        {

                Map<String, List<InputPart>> formParts = input.getFormDataMap();

                if (!formParts.containsKey("model"))
                    {
                        throw new IllegalArgumentException("Cannot create document due to param missing (model)");
                    }

                //Parsea los datos y los pone en el DTO
                String str = getBodyPartAsString(formParts.get("model"));
        }