Java Jersey:需要生成imageurl而不是图像

Java Jersey:需要生成imageurl而不是图像,java,spring,rest,jersey,Java,Spring,Rest,Jersey,我正在本地主机8080上运行我的服务器。我想制作一份与之相关的餐厅列表。我正在本地驱动器中上载带有Id的图像。我的上传状态是: { "uploadstatus": "C:/data/5731453cf1a60921d4d1b8b8oracle.JPG" } 当我把它作为一个列表时,我从我的控制器中找到了这些 { "total": 1, "list": [ { "id": "5731453cf1a60921d4d1b8b8", "name": "Kua

我正在本地主机8080上运行我的服务器。我想制作一份与之相关的餐厅列表。我正在本地驱动器中上载带有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();
    }
@GET
@生成(“应用程序/json”)
公众回应名单({
Map apiResponse=new HashMap();
Map serviceResponse=新建HashMap();
试一试{
List restaurants=restaurantService.List();
servicesponse.put(“total”,restaurants.size());
服务响应。放置(“列表”,餐厅);
返回Response.ok(serviceResponse.build();
}捕获(例外e){
logger.error(“获取餐厅列表时出错:”,e);
apiResponse.put(“error”,例如getMessage());
}
返回Response.status(500).entity(apiResponse.build();
}

我想要的是,我希望这家餐厅的形象是。如何配置控制器以实现所需的输出

如果需要检索资源,则应使用绝对路径 它是一个可注入接口,提供对应用程序和请求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();
        ...
    }
    ...

}
每个路径都必须精心设计,以适合您的应用程序和资源URI


我希望这能对您有所帮助。

您的响应类型似乎是
java.util.HashMap
,您希望如何在URL类型(
java.net.URL
)中获得
响应
?我现在正在这样尝试:List restaurants=restaurantService.List();对于(Restaurant-Restaurant:restaurants){String-imageURI=Restaurant.getRestaurantImage();Restaurant.setRestaurantImage(AppConstant.Restaurant\u-IMG\u-URL+imageURI);}您尝试获取路径AbsolutePath并将其设置到您的服务响应中。但是单线程不允许您读取路径并写入映射,您应该尝试observer模式获取绝对路径,然后将其写入HashMap。您能帮我编写一些代码片段吗?我没有足够的时间给出代码片段,但我有一个链接()这有效地描述了这种情况。因为我将把这个api与mobile集成,所以我不希望对列表中的每个项目都调用api。因此,应该没有用于获取图像的api。您可以省略第二个资源。两个@GET提供程序作为直接依赖关系断开连接。
@GET
@Path("data/{imgFilename}") 
@Produces("image/png")
public Response getImage(@PathParam("imgFilename") String fileName) {
    File image = restaurantService.getImgByName(fileName);          
    return Response.ok(image).build();      
}