Ich habe den folgenden Code:Wie gebe ich HTTP 404 JSON/XML Antwort in JAX-RS (Jersey) auf Tomcat zurück?
@Path("https://stackoverflow.com/users/{id}")
public class UserResource {
@Autowired
private UserDao userDao;
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public User getUser(@PathParam("id") int id) {
User user = userDao.getUserById(id);
if (user == null) {
throw new NotFoundException();
}
return user;
}
Wenn ich für einen Benutzer anfordern, die nicht, wie /users/1234
, mit „Accept: application/json
“ nicht existiert, dieser Code gibt eine HTTP 404
Antwort wie man erwarten würde, gibt aber Content-Type
Sets zu text/html
und eine Body-Nachricht von HTML. Anmerkung @Produces
wird ignoriert.
Ist es ein Problem des Codes oder ein Problem der Konfiguration?
Ich habe es getestet. Ich fange weiterhin mit NotFoundException ab, mappe diese Ausnahme nun mithilfe von ExceptionMapper, um Statuscode und Medientyp festzulegen. Es klappt! Vorher habe ich versucht, eine gleichwertige Antwort anstelle NotFoundException zurückgeben, aber ich habe das gleiche Ergebnis, eine Text/HTML-404-Antwort. Liegt dieses Verhalten daran, dass, wenn meine App eine NotFoundException auslöst, der standardmäßige (implizite) ExceptionMapper eingeht und die Antwort außer Kraft setzt, die ich zur HTML-Antwort zurückgebe? Danke! – IJR
Nach dem Ausprobieren einer anderen Lösung ist dies die beste und korrekte Lösung. Es ist nicht zwingend erforderlich, * NotFoundException * zuzuordnen. Verwenden Sie einfach Exception und tun Sie, was Sie brauchen – Valijon
@Provider ist sehr wichtig –