Java Spring Boot RestController测试返回404

Java Spring Boot RestController测试返回404,java,spring,spring-boot,spring-test,Java,Spring,Spring Boot,Spring Test,我试图测试RestController的Spring启动项目代码,但我总是得到404。 以下是我到目前为止的情况: @RestController("/service") public class ServiceInteractionController { @Autowired private PairingService pairingService; @GetMapping("/registered/{sensorId}") public ResponseEntity isSensor

我试图测试RestController的Spring启动项目代码,但我总是得到404。 以下是我到目前为止的情况:

@RestController("/service")
public class ServiceInteractionController {

@Autowired
private PairingService pairingService;

@GetMapping("/registered/{sensorId}")
public ResponseEntity isSensorRegistered(@PathVariable String sensorId) {
    return ResponseEntity.ok(pairingService.isSensorRegistered(sensorId));
}
}

}

结果总是这样:

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = service/registered/test123Id
       Parameters = {}
          Headers = []
             Body = <no character encoding set>
    Session Attrs = {}

Handler:
             Type = null

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 404
    Error message = null
          Headers = []
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError: Status 
Expected :200
Actual   :404
我做错了什么?我已经尝试用standaloneSetup在setUp方法中直接初始化mockmvc,并且还使用了@SpringBootTest和@AutoConfigureMockMvc

有人有什么有用的提示吗?我使用SpringBoot2.1.4


谢谢

您是否错过了/beforetheservice/registered/{sensorId}

mockMvc.perform(MockMvcRequestBuilders.get("service/registered/{sensorId}", TestConstants.TEST_SENSOR_ID))
        .andExpect(MockMvcResultMatchers.status().isOk()); 

尝试将此函数更改为:

@PathVariable 
@Test
public void testIsSensorRegistered(@PathVariable sensorId ) throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("service/registered/{sensorId}", TestConstants.TEST_SENSOR_ID))
            .andExpect(MockMvcResultMatchers.status().isOk());
}

在你的URL中使用前导/。谢谢,我还没有看到,但它仍然不起作用,并显示相同的错误,404而不是200。你还有其他提示吗?那么你的URL就不是你所期望的了。您的应用程序中是否注册了前缀。属性?谢谢您的帮助!我修正了它,@RestController后面的偏执不是REST路径的正确位置,我必须使用@RequestMapping。是的。@RestController只能指定一个名称,它将不会用于URL。感谢您给我这个提示,但它仍然不起作用。仍然存在相同的断言错误,因为我预期为200,得到404。您还有其他建议吗?您是否可以直接从浏览器或curl访问它,并共享结果?您是否可以解释您所做的更改以及它解决问题的原因?
@PathVariable 
@Test
public void testIsSensorRegistered(@PathVariable sensorId ) throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("service/registered/{sensorId}", TestConstants.TEST_SENSOR_ID))
            .andExpect(MockMvcResultMatchers.status().isOk());
}