如何从SqlExceptionHelper获取REST Spring应用程序的错误信息

uemypmqf  于 2023-04-28  发布在  Spring
关注(0)|答案(4)|浏览(122)

我的数据库中有一些表,我想获取有关对数据库的错误请求的信息。如果我试图保存实体与错误的foreigns键,我想得到有关这些键的详细信息。
例如:

2020-03-25 18:37:37.595 ERROR 9788 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: insert or update on table "student" violates foreign key constraint "student_fkey_to_specialty"
  Detail: Key (specialtykey)=(2) is not present in table "specialty".

我试图用这个代码来解决,但我得到了其他信息。

could not execute statement; SQL [n/a]; constraint [student_fkey_to_specialty]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

我的代码:

@PostMapping
    public void saveStudent(@RequestBody StudentDTO studentDTO) {
        if(studentDTO!=null){
            try {
                studentService.save(studentDTO);

            }catch (Exception|Error e){
                throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getLocalizedMessage(),e );
            }
        }
    }
bsxbgnwa

bsxbgnwa1#

使用循环迭代到原始异常,这里有一个示例函数:

private String getCauseMessage(Throwable t)

    Throwable cause = t;
    while (t.getCause() != null) {
        cause = t.getCause();
    }

    return t.getLocalizedMessage();
}

因为你永远不知道有多少异常可能被链接在一起,所以使用循环是最安全的方法。如果你直接使用它,你可能会得到一个NullPointerException或者得不到原始异常的消息。

oyjwcjzk

oyjwcjzk2#

Student表有“student_fkey_to_specialty”,这是违规的。检查此约束在哪个字段上,并为该字段提供正确的值

wfypjpf4

wfypjpf43#

我用这个代码解决了这个问题。这允许从数据库获取有关异常的信息。

e.getCause().getCause().getLocalizedMessage()
qij5mzcb

qij5mzcb4#

也许我来晚了我也面临着同样的问题,我可以使用DataAccessException来解决这个问题,而不仅仅是一个Exception作为catch的参数。DataAccessException提供了一个getMostSpecificCause方法,该方法具有与SqlExceptionHelper相同的信息。
我使用DataAccessException重写了你的方法:

@PostMapping
public void saveStudent(@RequestBody StudentDTO studentDTO) {
    if(studentDTO!=null){
        try {
            studentService.save(studentDTO);

        }catch (DataAccessException e){
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMostSpecificCause().getLocalizedMessage(), e );
        }
    }
}

相关问题