gpt4 book ai didi

java - 强制返回 JSON 的 Java Jersey RESTful Web 服务出现 HTTP 404 错误

转载 作者:行者123 更新时间:2023-11-30 03:19:49 24 4
gpt4 key购买 nike

我使用的是 Jersey 1.19、Java 1.6 和 Tomcat 5.5.28(即 Servlet 2.4)。

代码与此示例类似:

package com.mkyong.rest;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.mkyong.Track;

@Path("/json/metallica")
public class JSONService {

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public Track getTrackInJSON(@Context HttpServletRequest request) {

if (request.getRequestedSessionId() == null ||
request.getSession(false) == null) {

// return to caller with an HTTP 404 error
// code goes here
}
else {

Track track = new Track();
track.setTitle("Enter Sandman");
track.setSinger("Metallica");

return track;
}
}
}

该类返回 JSON,这正是调用者所期望的。但是,如果我想执行一些验证(例如错误或不存在的 session )并返回 HTTP 404 错误,这是如何完成的?

感谢您的帮助。

最佳答案

由于您使用的是 JAX-RS,我的首选方法是引发异常并让异常映射器捕获它并返回带有所需响应代码的响应。

所以你的资源类将是:

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public Track getTrackInJSON(@Context HttpServletRequest request) {

if (request.getRequestedSessionId() == null ||
request.getSession(false) == null) {
throw new IllegalStateException("NOT_FOUND");
}
}

然后创建异常映射器类:

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class IllegalStateExceptionMapper implements ExceptionMapper<IllegalStateException> {

@Override
public Response toResponse(final IllegalStateException exception) {
if ("NOT_FOUND".equals(exception.getMessage()) {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
}

您可以抛出自己的异常,而不是通用的 IllegalStateException,但要点是相同的。

关于java - 强制返回 JSON 的 Java Jersey RESTful Web 服务出现 HTTP 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com