2016-05-16 58 views
2

我在localhost上運行我的服務器:8080。我想生成一個餐廳的列表與它相關的restaurantImage。我在本地驅動器中上傳帶有其Id的圖像。我的上傳狀態是:Java澤西島:需要生成imageurl而不是圖片

{ 
    "uploadstatus": "C:/data/5731453cf1a60921d4d1b8b8oracle.JPG" 
} 

當我得到這個作爲一個列表我發現這些從我的控制器。

{ 
    "total": 1, 
    "list": [ 
    { 
     "id": "5731453cf1a60921d4d1b8b8", 
     "name": "Kualalam", 
     "address": "kkkk", 
     "restaurantImage": "C:/data/5731453cf1a60921d4d1b8b8oracle.JPG", 
     "review": null 
    } 
    ] 
} 

這裏是我使用獲得響應代碼:

@GET 
    @Produces("application/json") 
    public Response list() { 

     Map<Object, Object> apiResponse  = new HashMap<Object, Object>(); 
     Map<Object, Object> serviceResponse = new HashMap<Object, Object>(); 

     try { 

      List<Restaurant> restaurants = restaurantService.list(); 

      serviceResponse.put("total", restaurants.size()); 
      serviceResponse.put("list", restaurants); 

      return Response.ok(serviceResponse).build(); 

     } catch (Exception e) { 

      logger.error("Error in getting restaurants list:", e); 
      apiResponse.put("error", e.getMessage()); 
     } 

     return Response.status(500).entity(apiResponse).build(); 
    } 

什麼,我想在這裏,我想獲得這家餐廳形象http://localhost:8080/data/5731453cf1a60921d4d1b8b8oracle.JPG。你如何配置我的控制器來實現所需的輸出?

+0

您的響應似乎是'java.util.HashMap'的類型,您希望如何在_URL_('java.net.URL')類型中獲得'Response'? –

+0

我想這樣,現在: 列表 restaurants = restaurantService.list(); (餐廳餐廳:餐廳){ String imageURI = restaurant.getRestaurantImage(); restaurant.setRestaurantImage(AppConstant.RESTAURANT_IMG_URL + imageURI); } –

+0

您嘗試獲取路徑_AbsolutePath_並將其設置爲您的servicResponse我猜。但單線程不會讓您讀取路徑並寫入您的地圖,您應該嘗試觀察者模式來獲取絕對路徑,然後將其寫入_HashMap_。 –

回答

2

如果您需要檢索資源AbsolutePath,您應該使用UriInfo 這是可注入接口,它提供對應用程序和請求URI信息的訪問。

你的代碼可能是這樣的:

@GET  
@Produces("application/json") 
public Response list(@Context UriInfo uriInfo) { 
    ... 
    try { 
     List<Restaurant> restaurants = restaurantService.list(); 
     for(Restaurant restaurant: restaurants) { 
      String imageURI = restaurant.getRestaurantImage();   
      String imageFileName = imageURI.substring(imageURI.lastIndexOf("/")); 
      restaurant.setRestaurantImage(uriInfo.getAbsolutePath()+"/"+imageFileName); 
     } 
     serviceResponse.put("total", restaurants.size()); 
     serviceResponse.put("list", restaurants); 
     return Response.ok(serviceResponse).build(); 
     ... 
    } 
    ... 

} 

可能是你所需要的圖像提供商(讓你的「http://localhost:8080/data/5731453cf1a60921d4d1b8b8oracle.JPG」圖像)

@GET 
@Path("data/{imgFilename}") 
@Produces("image/png") 
public Response getImage(@PathParam("imgFilename") String fileName) { 
    File image = restaurantService.getImgByName(fileName);   
    return Response.ok(image).build();  
} 

每個路徑,必須精心設計以適應您的應用程序和資源URI。

我希望這可以幫助你。

+0

正如我將這個API與手機相集成,我不希望api調用列表中的每個項目。所以應該沒有獲取圖像的API。 –

+0

您可以省略第二個資源。這兩個@GET提供者是直接依賴的。 –