2010-03-18 6 views
3

J'ai une interface de repos pour mon projet. Pour une classe i ont une méthode POST où vous pouvez poster un xml et retourner un réponse personnalisée comme:Réponse personnalisée + statut HTTP?

<customResponse>Invalid email</customResponse>

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

Pour tous ces éléments, le HTTP STATUS est automatiquement mis sur 200 (OK). Y a-t-il un moyen 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.

MISE À JOUR 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 reviens simple réponse, je pourrais définir le statut, mais dans ce cas je ne peux pas voir d'une manière quelconque.

Répondre

8

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 xml de réponse personnalisée =>

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> 
+0

Un peu plus lisible pour les experts non-Web: 'javax.ws.rs.core.Response.Status.BAD_REQUEST' il est une constante pour le statut 400 –

0

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

Pour Java, appelez simplement setStatus sur l'objet HttpServletResponse.

Pour .NET, il ressemble à ceci:

HttpContext.Current.Response.StatusCode = xxx;