2016-05-16 5 views
2

localhost:8080でサーバーを実行しています。私はそれに関連したレストランイメージを持つレストランのリストを作りたいと思っています。私は自分のローカルドライブにその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

私は今のようにしようとしています: リストレストラン=レストランサービス。リスト(); for(レストランレストラン:レストラン){ String imageURI = restaurant.getRestaurantImage(); restaurant.setRestaurantImage(AppConstant.RESTAURANT_IMG_URL + imageURI); } –

+0

あなたは_AbsolutePath_のパスを取得し、あなたのservicResponseに設定しようとします。しかし、シングルスレッドでは、パスを読み込んでマップに書き込むことはできません。絶対パスを取得するためにオブザーバーパターンを試してから、_HashMap_に書き込んでください。 –

答えて

2

リソースAbsolutePathを取得する必要がある場合は、アプリケーションおよび要求URI情報へのアクセスを提供する注入可能なインターフェイスであるUriInfo を使用する必要があります。

あなたのコードは次のようなものが考えられます。すべてのパスはよく設計されなければなら

@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

2番目のリソースは省略できます。 2つの@GETプロバイダは、直接の依存関係として切断されます。 –

関連する問題