簡體   English   中英

@RequestMapping java.lang.AssertionError:預期狀態:200 實際:404

[英]@RequestMapping java.lang.AssertionError: Status Expected :200 Actual :404

在類外使用@RequestMapping 注釋的斷言錯誤

我收到此錯誤消息:

 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/// 
               }
}

任何想法出了什么問題?

如果您希望將 RestController 中的方法作為請求資源提取,則需要將它們標記為 @RequestMapping。 如果你想在你的第一個 RestController 中將基本請求映射保留在控制器級別,那么你需要執行以下操作:

@RestController
@RequestMapping("my/path")
public class MyController {

   @RequestMapping("/")
   public InputState myMethod() {
     ...
   }
}

正如文檔中所說:

在上面的例子中,@RequestMapping 用在了很多地方。 第一個用法是在類型(類)級別,它表示此控制器中的所有處理程序方法都與 /appointments 路徑相關。

所以類級別@RequestMapping僅表示相對。 它不是僅基於公共方法聲明實際資源路徑。 所以你需要像這樣注釋你的方法:

@GetMapping
public InputState executeRestFile(@RequestParam String name) throws Exception {
    // omited
}

或者像這樣:

@RequestMapping(method = RequestMethod.GET)
public InputState executeRestFile(@RequestParam String name) throws Exception {
    // omited
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM