我正在编写一个REST web应用程序(NetBeans 6.9、JAX-RS、TopLink Essentials),并试图返回JSON and HTTP状态代码.我已经准备好了代码,可以在客户端调用HTTP GET方法时返回JSON.基本上:

@Path("get/id")
@GET
@Produces("application/json")
public M_機械 getMachineToUpdate(@PathParam("id") String id) {

    // some code to return JSON ...

    return myJson;
}

但是我also想返回一个HTTP状态代码(500、200、204等)以及JSON数据.

我试着用HttpServletResponse:

response.sendError("error message", 500);

但这让浏览器认为它是"真正的"500,所以输出网页是一个常规的HTTP 500错误页面.

我想返回一个HTTP状态代码,这样我的客户端JavaScript就可以处理一些依赖于它的逻辑(例如,在HTML页面上显示错误代码和消息).这是可能的,还是不应该将HTTP状态代码用于此类事情?

推荐答案

下面是一个例子:

@GET
@Path("retrieve/{uuid}")
public Response retrieveSomething(@PathParam("uuid") String uuid) {
    if(uuid == null || uuid.trim().length() == 0) {
        return Response.serverError().entity("UUID cannot be blank").build();
    }
    Entity entity = service.getById(uuid);
    if(entity == null) {
        return Response.status(Response.Status.NOT_FOUND).entity("Entity not found for UUID: " + uuid).build();
    }
    String json = //convert entity to json
    return Response.ok(json, MediaType.APPLICATION_JSON).build();
}

看看Response班.

请注意,您应该始终指定内容类型,特别是在传递多个内容类型的情况下,但是如果每条消息都将表示为JSON,则只需将该方法注释为@Produces("application/json")

Java相关问答推荐

JLS中形式参数列表后面的任何括号对用于确定方法结果中的精确数组类型的具体含义是什么?

获取拦截器内部的IP地址

ActivityCompat.请求收件箱自动拒绝权限

在FML中删除关键帧动画

无法在Java中将hhmmss格式的时间解析为LocalTime

为什么我的画布没有显示在PFA应用程序中?

为什么Java中的两个日期有差异?

Java中不同包中的类之间的配置共享

Apache POI:使用反射获取zoom 级别

Jlink选项&-strie-ative-Commands";的作用是什么?

是否保证在事务性块的末尾标记违反约束?

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

我如何知道MediaDiscoverer何时完成发现介质?

MySQL数据库中未应用具有Spring数据的唯一约束

Android Java:已设置但未读取SharedPreferences

如何在太阳系模拟器中添加月球?

对从Spring Boot 3.1.5升级到3.2.0的方法的查询验证失败

Kotlin-仅替换字符串中最后一个给定的字符串

当我将JTextField的getText函数与相等的String进行比较时;t返回true

如何使用Jackson读取以方括号开头的JSON?