2016-04-23 5 views
-1

Bevor ihr darauf hin, habe ich bereits versucht, diese LösungenSenden JSON-Antwort mit HTTP-Status mit benutzerdefinierten Objekten

Serialize javax.ws.rs Entity to json

und es hat nicht funktioniert. Hier ist, wie ich versuche, um die Antwort zu senden:

return Response.status(fe.getHttpError()) 
      .entity(fe) 
      .type(MediaType.APPLICATION_JSON) 
      .build(); 

Wo fe ein Objekt vom Typ ist FirstException

public class FlightException extends Exception { 
    private int httpError; 
    private int errorCode; 
    private String message; 

    public FirstException(int httpError, int errorCode, String message) { 
     this.httpError = httpError; 
     this.errorCode = errorCode; 
     this.message = message; 
    } 

    public int getHttpError() { 
     return httpError; 
    } 

    @Override 
    public String getMessage() { 
     return message; 
    } 
} 

Mein Maven haben bereits folgenden Eintrag

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.19</version> 
</dependency> 

Die Frage ist also Wie kann ich ein Response-Objekt mit HTTP-Fehlercode mit einer benutzerdefinierten Entität in JSON senden?

Als Randbemerkung, wenn ich diesen Eintrag zu den Glassfish-Einträgen aus dem Link ändere früher ich geschrieben, ich beim Start folgenden Fehlermeldung erhalten:

java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; 
    javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119) 
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Antwort

0

Im Allgemeinen wird der Statuscode wird in der Antwort-Header zur Verfügung was ich denke, dass du das schon weißt. Wenn Sie aus irgendeinem Grund den HTTP-Statuscode im Antwortobjekt senden müssen, müssen Sie ein benutzerdefiniertes Antwort-Wrapper-Objekt erstellen, das sowohl Fehler als auch Antwortdaten enthalten kann. So können Sie z

,
public class ApiResponse implements Serializable { 

    private List<FirstException> errors; 

    private Map<String, Object> data; 
} 

dann, wenn Sie können Fehlerantwort wie

{ 
"errors": [ 
    { 
    "httpError": 401, 
    "errorCode": 401, 
    "message": "unauthroized request" 
    } 
] 
} 

und Erfolg Antwort zurück wie,

{ 
"data": { 
    "user": { 
    "name": "test" 
    } 
} 
} 

Dieses Format ist auch mit dem Standard-JSON-Api-Format ausgerichtet, Kasse http://jsonapi.org/

+0

das hat nicht geholfen. Ich habe immer noch das gleiche Problem –

+0

Dann können Sie neu formulieren, was Sie brauchten. Sie möchten HTTP-Status-Code als Antwort senden, ich glaube, das tut es, erklären Sie, was oder welche Probleme genau Sie konfrontiert sind –

+0

Wie ich bereits erwähnt, gibt es nicht JSON mit HTTP-Status zurück. Es gibt mir das gleiche Problem, das ich zuvor hatte. –

Verwandte Themen