我有一个JUnit测试:
@Autowired
private UserController userController;
@Test
public void getUser() throws Exception {
User user = jUnitDAOHelper.createUser();
Map<String, Object> params = new HashMap<String, Object>();
params.put("email", user.getUserDetail().getEmail());
String result = sendRequest("/user", GET, userController, params);
assertNotNull(result);
System.out.println("result="+result);
}
这是我的控制器(摘录):
@Controller
@RequestMapping("/user")
public class UserController extends BaseController {
// deleted
}
这是我的sendRequest方法:
public String sendRequest(String url, String method, Object controller, Map<String, Object> params) throws Exception {
request.setRequestURI(url);
request.setParameters(params);
request.setMethod(method);
request.setContentType("application/json");
handlerAdapter.handle(request, response, controller);
return response.getContentAsString();
}
抛出此错误:
org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: No matching handler method found for servlet request: path '/user', method 'GET', parameters map['email' -> array<String>['test@test.com']]
的HandlerAdapter:
protected MockHttpServletRequest request;
protected MockHttpServletResponse response;
protected HandlerAdapter handlerAdapter;
@Before
public void setUp() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
handlerAdapter = applicationContext.getBean(HandlerAdapter.class);
}
任何想法出了什么问题?我相信每件事情都是正确映射的,但它一直在抛弃它。
答案 0 :(得分:0)
您编写了一个控制器类...但是没有实际的方法来处理请求!您需要编写一个接受参数并生成结果的方法。
答案 1 :(得分:0)
请注意您尝试调用的方法
handlerAdapter.handle(request, response, controller);
来自HandlerAdapter
界面。
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
我几乎确信您使用的是已弃用的 AnnotationMethodHandlerAdapter
,如果找不到,则会resolveHandlerMethod()
抛出NoSuchRequestHandlingMethodException
。
您的UserController
BaseController
是否有任何处理程序方法?看起来不像。