Java Jersey:需要生成imageurl而不是image

时间:2016-05-16 04:26:57

标签: java spring rest jersey

我正在localhost上运行我的服务器:8080。我想生成一个与restaurantImage相关的餐馆列表。我正在我的本地驱动器上传带有Id的图像。我的上传状态是:

{
  "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 。如何配置我的控制器以实现所需的输出?

1 个答案:

答案 0 :(得分: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。

我希望这可以帮到你。