@Path("/roles")
public interface IRoleService {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Role create(Role role);
}
因为它创建了一个新的资源,所以如果它返回状态代码201是合适的,但目前它返回200。
我发现如何设置状态代码的唯一方法是让方法返回一个javax.ws.rs.core.Response
并在那里设置它,但我确实不希望我的所有接口返回一个泛型响应,而不是实际的响应对象(在本例中是role
)。
一种方法是创建一个自定义注释,并使用响应过滤器来设置状态。例如
注释
@NameBinding
@Target({METHOD, TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Status {
int DEFAULT_CODE = 0;
int code() default DEFAULT_CODE;
}
ContainerResponseFilter
@Status
@Provider
public class StatusFilter implements ContainerResponseFilter {
@Context
private ResourceInfo info;
@Override
public void filter(ContainerRequestContext req, ContainerResponseContext res) throws IOException {
Status status = getInterfaceAnnotation(info.getResourceMethod());
if (status != null) {
int code = status.code();
if (code != Status.DEFAULT_CODE && res.getStatus() == 200) {
res.setStatus(code);
}
}
}
private static Status getInterfaceAnnotation(Method resourceMethod) {
String methodName = resourceMethod.getName();
Class<?>[] paramTypes = resourceMethod.getParameterTypes();
Class<?> iface = resourceMethod.getDeclaringClass().getInterfaces()[0];
Method ifaceMethod;
try {
ifaceMethod = iface.getDeclaredMethod(methodName, paramTypes);
} catch (NoSuchMethodException e) {
return null;
}
return ifaceMethod.getAnnotation(Status.class);
}
}
在过滤器中,我们使用ResourceInfo
获得方法,并执行一些反射以获得@status
注释。从那里,可以获取状态代码并将其设置在响应上。
由于它是一个名称绑定筛选器,因此只对用它注释的方法调用它。在这里看到更多。
然后要使用它,只需将注释添加到方法中。
public interface ITestResource {
@GET
@Status(code=201)
String get();
}
问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我
我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头
我试图让ApacheHttpClient触发HTTP请求,然后显示HTTP响应代码(200404500等)以及HTTP响应正文(文本字符串)。需要注意的是,我使用的是因为大多数HttpClient示例都来自和API从版本3到版本4发生了巨大变化。 不幸的是,我只能让HttpClient返回状态代码或响应主体(但不是两者)。 这是我所拥有的: 所以我问:使用库,如何从同一
我有一个Restendpoint,如果没有产品,它将返回204,以及以下通用角度服务: 和 但是,当服务生成 204 代码时,我收到以下错误: TypeError:无法读取null的属性“status” 这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?
我在android上使用MapBox方向图,我只是想得到以后在地图上绘制的方向图。 但是,我从调用中得到的响应从来都不可用,因为response.body()返回null。 当我打电话回应时。code()我得到状态代码422,根据Mapbox API,这意味着“给定的请求无效。响应的消息键将包含对无效输入的解释。” 回应。message()返回字符串“Unknown”。 response.erro
当我使用MVC控制器时,我使用“返回OK(对象)”或“返回BadRequest(ErrorMessage)”等。 我怎样才能实现这是剃刀页? 我尝试返回新的JSON result(object);这在状态代码为200时有效。但是如果我想返回带有JSON错误消息的状态代码400呢?