2016-04-04 10 views
0

REST google apiからsendind POSTにContent-Type: application/x-www-form-urlencodedを送ります。私の方法ではJava、JBOSS、スペイン語のアクセント付きのMULTIPART_FORM_DATAとJSONを受け入れます。

------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です。私はすべてのエンコーディングタイプで多くのオプションを試しましたが、成功しませんでした。誰かが私を助けてくれますか、適切な記号を使ってただ1つの方法でファイルとjsonを受け入れる方法についていくつかのアドバイスをしてください。

+0

チェック[この](http://stackoverflow.com/questions/10226018/jboss-encoding-utf-8)。私はJBOSSを使ってからしばらくしていますが、私はポルトガル語のキャラクタの設定ファイルに何かを設定する必要があることを覚えています。 – dambros

+0

私は昨日試しましたが、それでも動作しません。 –

+0

次の '@Consumes(MediaType.MULTIPART_FORM_DATA +"; charset = utf-8 ")を試してください。 – dambros

答えて

0

2日後、私はこの問題を解決しました。その後、私はクラスを作成し

<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")); 
     } 
関連する問題