使用自定义对象的HTTP状态发送JSON响应

时间:2016-04-23 11:24:43

标签: java json rest jersey jax-rs

在你们指出之前,我已经尝试过这个解决方案

Serialize javax.ws.rs Entity to json

它并没有奏效。以下是我尝试发送回复的方式:

public CellStyle createBlueFont(){
    CellStyle fontStyle = workbook.createCellStyle(); // Creates new style
    Font blueFont = workbook.createFont(); // Creates new font
    blueFont.setColor(HSSFColor.BLUE.index);        
    fontStyle.setFont(blueFont);
    fontStyle.setWrapText(true);
    return fontStyle;
}

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

类型的对象
FirstException

我的maven已经有以下条目

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;
    }
}

所以问题是如何使用HTTP错误代码发送带有JSON自定义实体的Response对象?

作为旁注,如果我从之前发布的链接中将此条目更改为Glassfish条目,则会在启动时出现以下错误:

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

1 个答案:

答案 0 :(得分:0)

通常状态代码将在响应标头中提供,我想您已经知道了。如果由于某种原因需要在响应对象中发送http状态代码,则必须创建自定义Response Wrapper对象,该对象可能包含错误以及响应数据,

例如,您可以执行类似的操作,

public class ApiResponse implements Serializable  {

    private List<FirstException> errors;

    private Map<String, Object> data; 
}

然后你可以返回失败响应,如

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

和成功回应一样,

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

这种格式也与标准的json api格式,checkout http://jsonapi.org/

对齐