我收到此错误消息:
java.lang.AssertionError: Status
Expected :200
Actual :404
我的控制器就像这样
@Service
@RestController
@RequestMapping("/execute/files")
@ResponseBody
public class ControllerFiles {
@Autowired
@Qualifier("fileRunner")
ProcessRunnerInterface processRunnerInterfaceFiles;
public InputState executeRestFile(@RequestParam String name) throws ExecutionFailedException, URISyntaxException {
///code///
}
public List<String>....{
///code///
}
}
我的测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ControllerFilesTest {
@Autowired
private MockMvc mockMvc;
@Autowired
ControllerFiles controllerFiles;
@Test
public void testSpringMvcGetFiles() throws Exception {
this.mockMvc.perform(get("/execute/files").param("name", "Spring Community Files"))
.andDo(print()).andExpect(status().isOk());
}
}
但是当我有这样的代码时,测试工作正常!
@Service
@RestController
public class ControllerFiles {
@Autowired
@Qualifier("fileRunner")
ProcessRunnerInterface processRunnerInterfaceFiles;
@RequestMapping("/execute/files")
@ResponseBody
public InputState executeRestFile(@RequestParam String name) throws ExecutionFailedException, URISyntaxException {
///code///
}
public List<String>....{
///code///
}
}
任何想法出了什么问题?
答案 0 :(得分:0)
正如documentation中所述:
在上面的示例中,@ RequestMapping用于许多地方。第一种用法是在类型(类)级别,它表示此控制器中的所有处理程序方法都与/约会路径相关。
因此,班级@RequestMapping
仅表示相对论。它不是仅基于公共方法声明实际资源路径。所以你需要像这样注释你的方法:
@GetMapping
public InputState executeRestFile(@RequestParam String name) throws Exception {
// omited
}
或者像这样:
@RequestMapping(method = RequestMethod.GET)
public InputState executeRestFile(@RequestParam String name) throws Exception {
// omited
}
答案 1 :(得分:0)
如果希望将它们作为请求资源获取,则需要将RestController中的方法标记为@RequestMapping。如果要像在第一个RestController中那样在控制器级别保留基本请求映射,则需要执行以下操作:
@RestController
@RequestMapping("my/path")
public class MyController {
@RequestMapping("/")
public InputState myMethod() {
...
}
}