java - Spock + Spring Boot Web - 获取异常消息

标签 java spring spring-boot spock spring-test

所以,我正在使用 spring boot web,我想测试这个方法:

private void testException(HotelTvApp app) {
    throw new InternalServerException("Test message");
}

返回自定义异常:

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public class InternalServerException extends RuntimeException {
    public InternalServerException(String message) {
        super(message);
    }
}

调用此方法的 Controller 返回以下 JSON 数据:

{
  "timestamp": 1558423837560,
  "status": 500,
  "error": "Internal Server Error",
  "message": "Test message",
  "path": "/api/v1/test"
}

我想编写一个测试来检查异常消息是否正确。我试过这个:

def "createRoom() should return 500 if trying to create room with already existing number"() {
    given:
    def uriRequest = UriComponentsBuilder.fromPath("/api/v1/test")

    when:
    def perform = mvc.perform(get(uriRequest.toUriString()))

    then:
    perform.andExpect(status().isInternalServerError())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
            .andExpect(jsonPath('$.message', is("Test message")))
}

但是我得到了这个异常: 原因:java.lang.AssertionError:未设置内容类型

如何查看这里的异常消息?

最佳答案

您可以显式设置 contentType,如下所示

@ExceptionHandler(OrgNotFoundException.class)
public ResponseEntity<String> exceptionHandler(final Exception ex) {
    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType(MediaType.APPLICATION_JSON)
            .body("Error");
}

关于java - Spock + Spring Boot Web - 获取异常消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56233433/

相关文章:

java - 如何使用 java 中的 Spring data JPA 将附件(文件)添加到 couchbase 中的文档?

spring - 无法将具有 @RelatedTo 传出方向的 NodeEntity 与另一个节点一起保存

java - 尝试使用 Spring Boot 项目在 Java 17 中与本地 MYSQL 数据库建立 JDBC 连接时出错

java - 如何在Spring Boot中跳过Get Request中的Paging属性

java - 获取门票定价

java - 使用 Play Framework 的博客 Web 应用程序出现逻辑错误

java - spring Controller 在 Controller 测试中找不到模板

java - Web 应用程序的 PHP 前端和 Java 后端?

java - 强制重写类时调用基类版本方法,否则抛出异常

java - 针对特定端点的多种安全配置