I'm using Spring Boot with @ResponseBody based approach like the following:
@RequestMapping(value = VIDEO_DATA_PATH, method = RequestMethod.GET) public @ResponseBody Response getData(@PathVariable(ID_PARAMETER) long id, HttpServletResponse res) { Video video = null; Response response = null; video = videos.get(id - 1); if (video == null) { // TODO how to return 404 status } serveSomeVideo(video, res); VideoSvcApi client = new RestAdapter.Builder() .setEndpoint("http://localhost:8080").build().create(VideoSvcApi.class); response = client.getData(video.getId()); return response; } public void serveSomeVideo(Video v, HttpServletResponse response) throws IOException { if (videoDataMgr == null) { videoDataMgr = VideoFileManager.get(); } response.addHeader("Content-Type", v.getContentType()); videoDataMgr.copyVideoData(v, response.getOutputStream()); response.setStatus(200); response.addHeader("Content-Type", v.getContentType()); }
I tried some typical approaches as:
res.setStatus(HttpStatus.NOT_FOUND.value());
new ResponseEntity(HttpStatus.BAD_REQUEST);
but I need to return Response.
How to return here 404 status code if video is null?
Open or create the . htaccess-file and enter the relative path to the error page. First though, you have to create the error page (404. html, for example) on the first level of your website (the root-directory).
Spring provides a few primary ways to return custom status codes from its Controller classes: using a ResponseEntity. using the @ResponseStatus annotation on exception classes, and. using the @ControllerAdvice and @ExceptionHandler annotations.
If we want to specify the response status of a controller method, we need to annotate that method with the @ResponseStatus annotation. It has two interchangeable arguments for the desired response type: code and value. Note, that when we set reason, Spring calls HttpServletResponse. sendError().
This is very simply done by throwing org.springframework.web.server.ResponseStatusException
:
throw new ResponseStatusException( HttpStatus.NOT_FOUND, "entity not found" );
It's compatible with @ResponseBody
and with any return value. Requires Spring 5+
Create a NotFoundException
class with an @ResponseStatus(HttpStatus.NOT_FOUND)
annotation and throw it from your controller.
@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "video not found") public class VideoNotFoundException extends RuntimeException { }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With