gpt4 book ai didi

java - 未调用 Jersey ExceptionMapper

转载 作者:行者123 更新时间:2023-11-28 22:27:33 31 4
gpt4 key购买 nike

我正在尝试调用此异常映射器以返回 404 未找到响应,但它一直返回 500 内部错误。 Jersey 版本是 2.22.1。下面的代码片段。感谢所有帮助。

谢谢。

异常映射器类。

package org.learn.rest.messengerdemo.exception;

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

@Provider
public class DataNotFoundExceptionMapper implements ExceptionMapper<DataNotFoundException>{

@Override
public Response toResponse(DataNotFoundException ex) {
return Response.status(Response.Status.FORBIDDEN).build();
}
}

异常类。

包 org.learn.rest.messengerdemo.exception;

public class DataNotFoundException extends RuntimeException{

private static final long serialVersionUID = 2176642539344388961L;

public DataNotFoundException(String message)
{
super(message);
}
}

抛出服务类的方法。

public Message getMessage(long messageId) {
Message message = messages.get(messageId);
if(message == null)
{
throw new DataNotFoundException("Message with id " + messageId + " not found");
}
return message;
}

和资源类。

@GET
@Path("/{messageId}")
public Message getMessage(@PathParam("messageId") long messageId) {
return messageService.getMessage(messageId);
}

最佳答案

查看来自 previous questionweb.xml , 你有这个

<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.learn.rest.messengerdemo.resources</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

这个 init-parm jersey.config.server.provider.packages 说的是 Jersey 应该扫描命名包以获取 @Path 注释资源类和 @Provider 注释提供者类并注册它们。

您只列出了资源包 org.learn.rest.messengerdemo.resources,但您的 ExceptionMapper 位于不同的包中。默认行为是递归扫描,也意味着子包。因此,如果您改为列出 org.learn.rest.messengerdemo,您将同时访问资源包 异常包。或者您可以列出两个包,用逗号或分号分隔。两种方法都行

<param-value>org.learn.rest.messengerdemo</param-value>
<!-- OR -->
<param-value>
org.learn.rest.messengerdemo.resources,
org.learn.rest.messengerdemo.exception
</param-value>

关于java - 未调用 Jersey ExceptionMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379858/

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