顯示具有 Jersey 標籤的文章。 顯示所有文章
顯示具有 Jersey 標籤的文章。 顯示所有文章

星期一, 7月 15, 2013

[Java] Jersey 自動轉址

今天測試透過Jersey轉址到另一個下載連結,記錄一下操作方法。
主要透過Response.setOther這個方法就可以簡單達到,
不過要注意使用URI.create下載的連結時,
避免不合法的URI格式,可用URLEncode.encode解決。 
不過會遇到空白檔案下載變+號的編碼,記得取代一下+為%20即可

 (謎之聲:The URLEncoder implements the HTML Specifications for how to encode URLs in HTML forms.)。 URLEncoder.encode(obj_name).replace("+", "%20")

 如果炸掉可以將回傳結果轉換成json輸出,請看exception的程式範例

@GET
@Path("/download/{store_type}/{store_id}/{uuid}/{obj_name}")
public Response downloadObject(@Context HttpServletRequest request,
   @Context HttpServletResponse response,
   @PathParam(value = "store_type") String store_type,
   @PathParam(value = "store_id") String store_id,
   @PathParam(value = "uuid") String uuid,
   @PathParam(value = "obj_name") String obj_name,
   @QueryParam(value = "alf_ticket") String alf_ticket){
 
//...省略很多

String downloadlink = "http://test.jpg";
URI reidrectURI = null;
  
  try{
   
   reidrectURI = URI.create(downloadlink );
   
   return Response.seeOther(reidrectURI).build();
   
  }catch(IllegalArgumentException illaEx){
  
   illaEx.printStackTrace();
 JSONObject resp = new JSONObject();
   resp.put("statuscode", 500);
   resp.put("link", originalAlfDownloadLink);
  
   ResponseBuilder builder = 
     Response.status(Response.Status.INTERNAL_SERVER_ERROR).type(MediaType.APPLICATION_JSON);
   builder.entity(resp.toString());
   Response respBuilder = builder.build();
   
   return respBuilder;
  }
}

星期三, 8月 01, 2012

[Java] 快快樂樂使用 Jersey MVC 架構

先前利用jersey都只有在controller端直接將JSON物件轉成字串輸出,
jersey也提供MVC的方式來支援JSP來做template(View)
讓畫ui結構更直覺多了。

星期一, 7月 30, 2012

[Jersey] Client Post

Form post

MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
ClientResponse response = webResource.type("application/x-www-form-urlencoded").post(ClientResponse.class, formData);

Post JSON
需要注意在post json要這樣使用webResource.type(MediaType.APPLICATION_JSON).post(), 否則會回傳 415 Unsupported media type
public String isExist(
   String parentUUID,
   String objName,
   String alf_ticket){
  
  String response = null;
  
  String apiURL = this.getEndpoint() + "/repo/object/check?ticket=" + alf_ticket;
  
  this.client = Client.create();
  
  //input body
  JSONObject jsonBody = new JSONObject();
  try {
   jsonBody.put("parentUUID", parentUUID);
   jsonBody.put("objName", objName);
  } catch (JSONException e) {
   System.out.println("[RepositoryObject] Fail to create json");
  }
  
  //create resource
  this.webResource = this.client.resource(apiURL);
//  this.webResource.type("application/json");
  
  //do post
  this.clientResp =  webResource.type(MediaType.APPLICATION_JSON).post(
    ClientResponse.class,jsonBody.toString());
  
  //get string of response
  response = this.clientResp.getEntity(String.class);
  
  System.out.println("[RepositoryObject] status:" + this.clientResp.getStatus());
  System.out.println("[RepositoryObject] response:" + response);
  
  return response;
 }

星期日, 6月 03, 2012

[Java] Jersey Session

Session控制
@Path("/helloworld")
public class HelloWorld {

    @GET
    @Produces("text/plain")
    public String hello(@Context HttpServletRequest req) {

        HttpSession session= req.getSession(true);
        Object foo = session.getAttribute("foo");
        if (foo!=null) {
                System.out.println(foo.toString());
        } else {
                foo = "bar";
                session.setAttribute("foo", "bar");
        }
        return foo.toString();


    }
}

星期四, 3月 15, 2012

[Java] Jersey 清除 response cache

通常在IE瀏覽器常常會遇到亂Cache一通的問題,
Jersey提供Response物件來讓我們簡單的可以清除Cache。
好好利用cache也是一個節省頻寬跟效能的好方法。
如果有很多方法都需要清Cache的話,就考慮使用Filter的寫法比較方便。

@GET
 @Path("/{uid}")
 @Produces(MediaType.APPLICATION_JSON)
public Response getUser(
   @PathParam(value="uid") String uid){

//do sth

ResponseBuilder rb = Response.ok(respJSON.toString());
  CacheControl cc = new CacheControl();
     cc.setNoCache(true); 
     return rb.cacheControl(cc).build();

}

星期日, 3月 11, 2012

[Java] Jersey WADL

當Jerey愈用愈久之後,
如何產生這些URL資源的描述文件就是一件苦惱的事,
有需求的人可以參考這篇文章 Jersey and WADL(Web Application Description Language)
假設你已經有一個jersey的站台之後並完成WADL相關組態設定之後,
就可以呼叫http://localhost:9998/application.wadl來取得你的Restful應用程式的WADL


    
    
        
            
                
                    
                
            
        
    




要建立WADL可以參考以下二種方法

How to configure your webapp to provide extended WADL
This page describes what's necessary for getting an extended WADL generated within your running webapp.

How to generate extended WADL (without a webapp)
The generate-wadl sample shows how to generate (extended) WADL with maven(project management tool), without the need to start the webapp. This sample also has a README you might want to look at.

星期二, 6月 07, 2011

[Java] Upload file using Jersey

目前使用Jersey接收上傳檔案只能使用HttpServletRequest來接收上傳成功!!
尚未解決使用@FormDataParam無法上傳的錯誤!!待解
 //目前會HTTP Status 415 - Unsupported Media Type大爆炸
 @POST
 @Path("/simpleupload2")
 @Consumes(MediaType.MULTIPART_FORM_DATA)
 public void simpleUpload2(
   @FormDataParam("username") final  String username,
   @FormDataParam("filedata") final  InputStream file,
   @FormDataParam("filedata") final  FormDataContentDisposition disposition){
  
  System.out.println("username:" + username);
 }

以下範例是使用Apache FileUpload Module 來取得上傳的檔案物件
@POST
 @Path("/simpleupload")
 @Consumes(MediaType.MULTIPART_FORM_DATA)
 public void simpleUpload(
   //@Context UriInfo ui,
   @Context HttpServletRequest request
  ){

  String fileRepository = "D:\\";
  if (ServletFileUpload.isMultipartContent(request)) {
   FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   List<FileItem> items = null;
   try {
    items = upload.parseRequest(request);
   } catch (FileUploadException e) {
    e.printStackTrace();
   }
   if (items != null) {
    Iterator<FileItem> iter = items.iterator();
    while (iter.hasNext()) {
     FileItem item = iter.next();
     if (!item.isFormField() && item.getSize() > 0) {
      System.out.println("File is found.");
      String fileName = processFileName(item.getName());
      try {
       String savePath = fileRepository + fileName;
       System.out.println("savePath:" + savePath);
       item.write(new File(savePath));
      } catch (Exception e) {
       e.printStackTrace();
      }
     }else{
      System.out.println("getFieldName:" + item.getFieldName());
      System.out.println(item.getString());
     }
    }
   }
  }
 }

Reference:
Multiple file upload using RESTful web service (Jersey)

其他你感興趣的文章

Related Posts with Thumbnails