Rozne http status'y z jednej metody, zaleznie od inputu

0

mam sobie taka metode

@RequestMapping(value = "/customers/{id}", method = RequestMethod.GET)
	@ResponseStatus(HttpStatus.OK)
	public Customer getCustomerById(@PathVariable("id") long id){
		return customerService.getCustomerById(id);
	}

jezeli w url bedzie id, ktore istnieje to wszystko ok. Jednak chcialbym zeby metoda zwracala 404 w przypadku gdy wolane jest id, ktorego nie ma w bazie:, wymyslilem cos takiego:

@RequestMapping(value = "/customers/{id}", method = RequestMethod.GET)
	//@ResponseStatus(HttpStatus.OK)
	public ResponseEntity<Customer> getCustomerById(@PathVariable("id") long id){
		Customer customer = customerService.getCustomerById(id);
		if(customer==null) 
			return new ResponseEntity<Customer>(customer,HttpStatus.NOT_FOUND);
		return new ResponseEntity<Customer>(customer,HttpStatus.OK);
	}

Czy sa inne sposoby na uzyskanie takiego efektu? Zastanawia mnie teraz adnotacje @ResponseStatus na metodzie , czy nie jest tak ze wiekszosc metod w crud moze zwrocic rozne statusy, wtedy taka adnotacja staje sie bezuzyteczna?

0

Generalnie to jest dobre podejście które pokazałeś. Ewentualnie można dodać jako argument tej metody kontrolera HttpServlerResponse i tam ustawić status, ale na jedno wyjdzie. Z tą adnotacją ustawiającą status to jej cel jest inny - chodzi raczej o ustawienie statusu kiedy wiemy konkretnie jaki ma być, szczególnie jeśli robimy jakis generyczny error handler czy exception handler - wtedy wiadomo że status będzie np. 404, z definicji.

Mozesz ewentualnie wziąć za wzór: i np. łapać wyjątek exception handlerem, przerabiać stacktrace na jsona a potem zwrócić i ustawić status na OK ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1