Pergunta

Eu tenho uma interface de descanso para o meu projeto. Para uma aula, tenho um método de postagem onde você pode postar um XML e eu devolvo um resposta personalizada Curti:

<customResponse>Invalid email</customResponse>

Se o email do XML publicado, estivesse incorreto + outras mensagens personalizadas que eu defini para diferentes situações.

Para tudo isso, o status HTTP é automaticamente colocado em 200 (OK). Existe alguma maneira de mudá-lo?

PS: Eu sei que posso jogar um aplicativo da web como:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

Mas, neste caso, minha resposta personalizada não está mais incluída.

Então, eu só quero retornar meu erro personalizado + 400 como resposta HTTP.

Desde já, obrigado.

ATUALIZAR Após os comentários: meu método é:

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

Você vê que eu retorno minha resposta personalizada. Se eu retornaria uma resposta simples, eu poderia definir o status, mas, neste caso, não consigo ver nenhuma maneira.

Foi útil?

Solução

Encontrei a solução:

Coloque o tipo de retorno como resposta ao método:

     @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) fará o truque. Quando build () ele converterá sua resposta personalizada 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>

Outras dicas

setStatus ou sendError sobre HttpServletResponse deve fazer o truque.

Isso é tag Java, mas não reconheço a resposta.status.bad_request.

Para Java, basta ligar para o SetStatus no objeto HttpServletResponse.

Para .NET, parece o seguinte:

HttpContext.current.Response.statuscode = xxx;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top