Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何测试Spring引导控制器的错误输出?_Json_Spring_Spring Boot - Fatal编程技术网

Json 如何测试Spring引导控制器的错误输出?

Json 如何测试Spring引导控制器的错误输出?,json,spring,spring-boot,Json,Spring,Spring Boot,我用一个简单的请求/响应实现了一个简单的控制器 控制器 请求 当我想要测试默认错误处理的正确输出时,我似乎无法使用单元测试检查默认json格式的输出。回答似乎总是空的。当我通过一个普通的curl命令触发请求时,我会看到一个正确的响应。我假设这是因为返回的JSON无法映射到HelloWorldResponse上。有没有办法检查返回的输出在响应体上是否有效 试验 Json响应 尝试使用print()方法进行调试,可能在执行过程中引发异常 MvcResult andReturn=mockMvc.per

我用一个简单的请求/响应实现了一个简单的控制器

控制器

请求

当我想要测试默认错误处理的正确输出时,我似乎无法使用单元测试检查默认json格式的输出。回答似乎总是空的。当我通过一个普通的curl命令触发请求时,我会看到一个正确的响应。我假设这是因为返回的JSON无法映射到HelloWorldResponse上。有没有办法检查返回的输出在响应体上是否有效

试验

Json响应

尝试使用print()方法进行调试,可能在执行过程中引发异常

MvcResult andReturn=mockMvc.perform(get(“/api”)
.accept(MediaType.APPLICATION_JSON))
.andDo(print())

.andReturn()

您发布的
@Controller
类与测试用例(和响应)似乎不匹配(您在测试用例中调用
/hello
,而您的
@RequestMapping
表示
/welcome
…我们能看到正确的代码吗?看起来您有一个
@RequestParam(“名称”)
设置,但你没有通过。

你能给我们看一下你的测试吗?该死..确实忘记了测试!把它添加到问题中了。
    @RestController
@RequestMapping("/")
public class HelloWorldController extends AbstractRestController {

    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public HelloWorldResponse sayHello(@Valid @RequestBody HelloWorldRequest request) {

        String message = String.format("Hello %s!", request.getSayHelloTo());
        return new HelloWorldResponse(message);
    }

}
public class HelloWorldRequest {

    @NotEmpty
    @NotNull
    private String sayHelloTo;

    protected HelloWorldRequest() {

    }

    public HelloWorldRequest(String sayHelloTo) {
        this.sayHelloTo = sayHelloTo;
    }

    public String getSayHelloTo() {
        return sayHelloTo;
    }

    @Override
    public String toString() {
        return "HelloWorldRequest{" +
                "sayHelloTo='" + sayHelloTo + '\'' +
                '}';
    }
}
class TestSpec extends Specification {

    MockMvc mockMvc

    def setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build()
    }

    def "Test simple action"() {
        when:
        def response = mockMvc.perform(post("/hello")
                .contentType(MediaType.APPLICATION_JSON)
                .content('{"sayHelloTo": ""}')
        )

        then:
        response.andExpect(status().isOk())
    }
}
 {
       "timestamp" : 1426615606,
       "exception" : "org.springframework.web.bind.MissingServletRequestParameterException",
       "status" : 400,
       "error" : "Bad Request",
       "path" : "/welcome",
       "message" : "Required String parameter 'name' is not present"
    }