找不到匹配的处理程序方法 - Spring

时间:2013-09-25 14:45:45

标签: java spring junit

我有一个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);
    }

任何想法出了什么问题?我相信每件事情都是正确映射的,但它一直在抛弃它。

2 个答案:

答案 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是否有任何处理程序方法?看起来不像。