我正在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 。如何配置我的控制器以实现所需的输出?
答案 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。
我希望这可以帮到你。