0

16進数でエンコードされた特殊文字を含むパラメータを受け取るWebサービスがあります。jersey WebサービスにURLパラメータを渡す方法...?lib = T%E2che%20Yves

http://webservice.com/tasks?lib=T%E2che%20Yves 

デバッガが表示されます:

-> lib =T?che Yves 

しかし、私は

-> lib =T%E2che%20Yves 

それとも私の夢が叶いました場合、私は可能性を期待していた以下のlibのパラメータで

@PUT 
@Path("/tasks") 
@Produces("application/xml; charset=UTF-8") 
public Response createTask(@QueryParam("lib") 
String pLibelle) { 

    logger.debug(" -> lib =" + pLibelle); 
... 

have:

-> lib =Tâche Yves 

(つまり、URLエンコードする前に、元の文字列です)

だから私の質問は次のとおりです。 どのように私は私の元の文字列を得ることができますか?それは、URLエンコードされたパラメータは、ジャージーのメカニズムによって間違った方法で既にtradcedされているようだ、私はそれを制御することができないようだ?

ありがとうございました。

答えて

1

URLをエンコードすると、Tâche YvesT%C3%A2che%20Yvesでなく、T%E2che%20Yvesになります。

以下を守ってください。

  • UTF-8を使用する場合、â%C3%A2として符号化されます。
  • CP-1252を使用する場合、â%E2としてエンコードされます。

あなたは、エンコードされた値のURLを取得するには@Encodedアノテーションを使用することができます

@PUT 
@Path("/foo") 
@Produces("application/xml; charset=UTF-8") 
public Response method(@Encoded @QueryParam("bar") String bar) { 
    ... 
} 
+0

おかげカッシオMazzochi Molinがします! – Glassfrog

0

私が使うことになる最終的なコードだこと:

@PUT 
@Path("/tasks") 
@Produces("application/xml; charset=UTF-8") 
public Response createTask(@Encoded @QueryParam("lib") String pLibelleUrlIso8859_1) { 

    String lLibelleIso8859_1 = ""; 
    String lLibelleUtf8 = ""; 

    try { 

     // Conversion 1 : (ISO-8859-1 + URLEncoded) -> ISO-8859-1 
     lLibelleIso8859_1 = java.net.URLDecoder.decode(pLibelleUrlIso8859_1, "ISO-8859-1"); 

     // Conversion 2 : ISO-8859-1 -> UTF-8 
     lLibelleUtf8 = javax.mail.internet.MimeUtility.decodeText(lLibelleIso8859_1); 

    } catch (UnsupportedEncodingException e1) { 

     logger.error("[createTask] " + e1.getMessage()); 

     // ERROR 500 - A038 
     lOutput = erreurXml("A038", 
          "Unsupported encoding. ISO-8859-1 + URL Encoding expected.", 
          e1); 
     return Response.status(Response.Status.INTERNAL_SERVER_ERROR) 
         .entity(lOutput).build(); 
    } 

    logger.debug(" -> lib =" + pLibelleUtf8); 

    ... 
} 
関連する問題