2017-03-16 97 views
0

在我的其中一个资源中,我通过会话响应将JSON对象传递给JSP页面。在响应中阻止URL编码

@POST 
@Path("/updateUser") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public Response userProfile(
     @Context UriInfo uriInfo, String updateProfileData, 
     @Context HttpServletRequest req 
) throws JSONException, UnsupportedEncodingException { 

    String session = req.getSession(true).getId(); 

    JSONObject jsOb = new JSONObject(updateProfileData); 
    JSONArray jaArr = jsOb.getJSONArray("profileData"); 
    JSONObject a; 

    StringBuilder sbv = new StringBuilder(); 
    StringBuilder sbk = new StringBuilder(); 
    String prefix = ""; 

    try { 
     conn = DaoMessenger.PostGresCon().getConnection(); 
     for (int i = 0; i < jaArr.length();) { 
      JSONObject jsonObject = jaArr.getJSONObject(i); 
      Iterator<String> keys = jsonObject.keys(); 

      while (keys.hasNext()) { 
       String key = keys.next(); 
       Object value = jsonObject.get(key); 
       sbk.append(prefix); 
       sbv.append(prefix); 
       prefix = ","; 
       sbv.append("'").append(value).append("'"); 
       sbk.append(key); 
      } 
      query = conn.prepareStatement("INSERT INTO addresses (" + sbk.toString() + ") values (" + sbv.toString() + ")"); 
      System.out.println("QUERY: " + query); 

      rs = query.executeUpdate(); 
      System.out.println("RS: " + rs); 
      i++; 
      System.out.println("rowsUpdated: " + rs); 
     } 

    } catch (Exception e){ 
     e.printStackTrace(); 
    } 


    if (rs > 0) { 
     System.out.println("SUCCESS"); 

     URI uri; 
     uri = uriInfo.getBaseUriBuilder() 
      .path("../home/index.jsp?page/#/home") 
      .queryParam("obj", URLEncoder.encode(updateProfileData, "UTF-8")) 
      .build(); 
      return Response.seeOther(uri).build(); 

    } else { 
     System.out.println("STUCK SOMEWHERE"); 
     URI uri = uriInfo.getBaseUriBuilder() 
      .path("/messenger/home/index.jsp?page/#/error;" + req.getSession(true).getId()).build(); 
     return Response.seeOther(uri).build(); 
    } 

} 

,但我一直面临

404错误

的URL被编码和路径了。 所以:?变为:%3F#变为:

而不是%23http://localhost:8080/messenger/home/index.jsp?page/#/home

我得到:http://localhost:8080/messenger/home/index.jsp%3Fpage/%23/home

第二个是不是为我工作,并导致404错误。我通过谷歌搜索尝试了几个解决方案,但都没有帮助。

如何在将响应发送到JSP页面后强制这样保持路径的原始字符?

+0

你可以把它回来URLDecoder.decode的URL重定向到浏览器之前解码 – mhasan

+1

你能[编辑]你的问题你如何展现”在对客户端的响应中包含构造的URI? – Kenster

+0

@mhasan:我试了一下,但没有成功 –

回答

0

尝试更改您的响应创建。

FROM:

return Response.seeOther(uri).build(); 

TO:

return Response.seeOther(URI.create(uri)).build(); 
+0

我也尝试过。这不是同一类型。无法将URI转换为字符串 –

+0

您不是使用javax.ws.rs.core.Response类吗?它有公共静态ResponseBuilder seeOther(URI位置)方法。 – mhasan

+0

是的,我是。 import javax.ws.rs.core。*; –