Question

J'ai une interface de repos pour mon projet. J'ai pour une classe d'une méthode POST où vous pouvez poster un xml et je renvoyer une réponse personnalisée comme:

<customResponse>Invalid email</customResponse>

si l'e-mail du xml qui a été affiché, était incorrect + autres messages personnalisés que j'ai définis pour différentes situations.

Pour toutes ces STATUS HTTP est automatiquement mis en 200 (OK). Est-il possible de le changer?

Ps: Je sais que je peux lancer une application web comme:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

mais dans ce cas ma réponse personnalisée est plus inclus.

Donc je veux juste retourner mon erreur personnalisée + 400 comme réponse http.

Merci d'avance.

UPDATE après les commentaires: Ma méthode est:

 @POST
 @Path("{membershipExternalId}")
 @Consumes(MediaType.APPLICATION_XML)
 @Produces("application/xml")
 public CustomResponse invite(){ //code}

Vous voyez que je retourne ma réponse CUSTOM. Si je retournerais simple, réponse que je pourrais définir le statut, mais dans ce cas, je ne vois aucune façon.

Était-ce utile?

La solution

trouvé la solution:

Mettre le type de retour en tant que réponse à la méthode:

     @POST
     @Path("{membershipExternalId}")
     @Consumes(MediaType.APPLICATION_XML)
     @Produces("application/xml")
     public Response invite(){ //code

     if (fail())
        return Response.status(400).entity(customResponse).build();
}

Response.Status (400) .entity (customResponse) fera l'affaire. Lorsque build () il permet de convertir votre réponse personnalisée xml =>

HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Set-Cookie: JSESSIONID=1C72921619A6B32BC1166B3567A39ADA; Path=/
Content-Type: application/xml
Content-Length: 140
Date: Thu, 18 Mar 2010 12:15:15 GMT
Connection: close

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><customResponse><message>Invalid email</message></customResponse>

Autres conseils

setStatus ou sendError sur HttpServletResponse devrait faire l'affaire.

est marqué Java, mais je ne reconnais pas Response.Status.BAD_REQUEST.

Pour Java il suffit d'appeler setStatus sur l'objet HttpServletResponse.

Pour .NET, il ressemble à ceci:

HttpContext.Current.Response.StatusCode = xxx;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top