【发布时间】:2014-09-28 13:09:58
【问题描述】:
我的控制器中有一个方法,如下所示:
@RequestMapping(value = VideoSvcApi.VIDEO_DATA_PATH, method = RequestMethod.POST)
public @ResponseBody
VideoStatus setVideoData(
@PathVariable(VideoSvcApi.ID_PARAMETER) long id,
@RequestParam(value = VideoSvcApi.DATA_PARAMETER) MultipartFile videoData,
HttpServletResponse response) {
Video video = null;
for (Video v : videos) {
if (v.getId() == id) {
video = v;
break;
}
}
if (video == null) {
throw new VideoNotFoundException(id);
} else {
try {
videoFileManager.saveVideoData(video,
videoData.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
自定义异常如下所示:
@ResponseStatus(value = HttpStatus.NOT_FOUND)
private class VideoNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
public VideoNotFoundException(long id) {
super("Video with id " + id + " not found");
}
}
当我遇到一个不存在 id 的路径时,响应是这样的:
{
"timestamp":1407263672355,
"error":"Not Found",
"status":404,
"message":""
}
我的问题是...如何在响应中设置自定义消息,但保留 json 结构的其余部分?
我知道我可以在注释中使用“原因”属性(在自定义异常中),但是这样做我总是会返回相同的消息,并且我想显示如下消息:“ID X 的视频不是找到”
谢谢!
【问题讨论】:
标签: java json spring exception http-status-code-404