当前位置: 首页 > 知识库问答 >
问题:

将正文添加到404未找到异常

谈炳
2023-03-14

在用JHipster生成的REST API中,我想抛出一些404异常。通常用

return new ResponseEntity<>(HttpStatus.NOT_FOUND);

这实际上会导致对xhr请求的404响应。问题是,在前面,JHipster用

angular.fromJson(result)

当404是实际响应时,这样的结果为空,这使得解析失败。

{
    "timestamp": "2016-04-25T18:33:19.947+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/api/user/myuser/contact"
}

我试过这个:Spring-MVC控制器中的触发器404?但我无法设置响应的参数。

共有1个答案

司马彦
2023-03-14

第一个选项是定义错误对象,并将它们返回为404 Not found正文。如下所示:

Map<String, String> errors = ....;
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(errors);

您可以抛出一个异常而不是返回典型的responseEntity,该异常将解析为404 Not found。假设您有一个NotFoundException类似:

@ResponseStatus(code = HttpStatus.NOT_FOUND)
public class NotFoundException extends RuntimeException {}

那么如果在控制器中抛出此异常,您将看到如下内容:

{  
   "timestamp":1461621047967,
   "status":404,
   "error":"Not Found",
   "exception":"NotFoundException",
   "message":"No message available",
   "path":"/greet"
}

例如,您可以引入一个异常,例如APIException,它是控制器抛出的所有其他异常的超类。此类定义了一个代码/消息对,如下所示:

public class APIException extends RuntimeException {
    private final int code;
    private final String message;

    APIException(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int code() {
        return code;
    }

    public String message() {
        return message;
    }
}

每个子类都可以根据其异常的性质为这对子类提供一些合理的值。例如,我们可以有InvalidStateException:

@ResponseStatus(code = HttpStatus.BAD_REQUEST)
public class InvalidStateException extends APIException {
    public InvalidStateException() {
        super(1, "Application is in invalid state");
    }
}

或者那个臭名昭著的找不到的:

@ResponseStatus(code = HttpStatus.NOT_FOUND)
public class SomethingNotFoundException extends APIException {
    public SomethingNotFoundException() {
        super(2, "Couldn't find something!");
    }
}
@RestController
public class APIExceptionHandler extends AbstractErrorController {
    private static final String ERROR_PATH = "/error";
    private final ErrorAttributes errorAttributes;

    @Autowired
    public APIExceptionHandler(ErrorAttributes errorAttributes) {
        super(errorAttributes);
        this.errorAttributes = errorAttributes;
    }

    @RequestMapping(path = ERROR_PATH)
    public ResponseEntity<?> handleError(HttpServletRequest request) {
        HttpStatus status = getStatus(request);

        Map<String, Object> errors = getErrorAttributes(request, false);
        getApiException(request).ifPresent(apiError -> {
            errors.put("message" , apiError.message());
            errors.put("code", apiError.code());
        });
        // If you don't want to expose exception!
        errors.remove("exception");


        return ResponseEntity.status(status).body(errors);
    }

    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }

    private Optional<APIException> getApiException(HttpServletRequest request) {
        RequestAttributes attributes = new ServletRequestAttributes(request);
        Throwable throwable = errorAttributes.getError(attributes);
        if (throwable instanceof APIException) {
            APIException exception = (APIException) throwable;
            return Optional.of(exception);
        }

        return Optional.empty();
    }
}
{  
   "timestamp":1461621047967,
   "status":404,
   "error":"Not Found",
   "message":"Couldn't find something!",
   "code": 2,
   "path":"/greet"
}
 类似资料:
  • 我得到下面的错误。我最近将更新为其最新版本,之后出现此错误。我不确定到底出了什么问题,我在谷歌上非常努力地寻找答案,因为我是一个新的角度类型的编程。 我尝试了以下步骤: 已尝试弃用返回,但运气不佳 尝试导入软件包,仍然没有成功 已尝试启动rc1,但运气不佳 你能告诉我实际的问题是什么,我应该如何解决这个问题? localhost/: 38错误:(SystemJS)XHR错误(404未找到)加载ht

  • 我试图让Nginx PHP5-FPM Drupal 7正常工作,但当我访问我的域时,我发现“404”没有找到。 我的配置基于:-https://github.com/perusio/drupal-with-nginx - https://github.com/perusio/php-fpm-example-config /etc/nginx/nginx。形态 ###################

  • 这是我的nginx配置文件。 默认情况下。conf,第一个位置用于访问/usr/share/nginx/html目录,当我访问http://47.91.152.99.但是,当我为目录/usr/share/nginx/public directory添加一个新位置时,nginx会在我访问时返回404页http://47.91.152.99/test. 那么,到底是怎么回事呢?我误用nginx的指令吗

  • 我有一个xamarin应用程序,可以从webAPI中提取数据。我多次检查api地址,我确信它是正确的。当我调试代码时,服务器上出现404 not found错误。然而,当我将URL复制并粘贴到浏览器时,我得到了预期的结果。我不明白为什么我的应用程序返回404。 我的方法: 我的桥接方法到HttpClient的PostAsync方法: 代币:正确 API URL:正确(我从调试输出中检查“/”符号。

  • 我使用springboot和maryadb数据库进行训练。当我测试数据恢复时,我在邮递员中收到这样一条消息: 。我在复制粘贴中尝试了几个教程,我总是有相同的消息。我也会把控制台中的消息。提前谢谢你的帮助。 控制器 服务 回应的 模型 应用属性 安慰

  • 我将使用此jwt令牌对api-gateway进行另一次调用,以访问受保护的服务。 API gateway API gateway项目具有以下相关依赖项: 我在application-dev.yml中设置了这个配置 您可以看到寻址服务的路由(当时没有服务发现)。我实现了一个SecurityConfig类,如教程中所示: 希望我报告了所有需要的信息,我会请求一些帮助,使用从keycloak获得的访问令