java - 如何解决spring mvc映射

标签 java spring spring-mvc

我有两个 Controller ,第一个是:

    @Controller("/similarsearch")
public class SimilarSearchController {

  @Autowired
  SimilarSearchService similarSearchService;

  @RequestMapping(method = RequestMethod.GET,produces = "application/json; charset=UTF-8")
  @ResponseBody
  public String loadSimilarSearchPhrases(HttpServletRequest request,
                                         @RequestParam(value = "q", required = true, defaultValue = "") final String query){
    HttpSession session = request.getSession();
    List<List<SimilarLink>> responseMain = (List<List<SimilarLink>>) session.getAttribute("responseMain");
    Map<String, List<String>> result = similarSearchService.getSimilarSearchPhrases(responseMain,query);
    return new JSONSerializer().exclude(JsonHelper.STANDARD_EXCLUDE).include("*").serialize(result);
  }
}

它工作得很好,当我访问 localhost:0000/similarsearch/时,它返回了我需要的 json。但是当我添加另一个 Controller 时

@Controller("wiki")
public class WikiController {

  @Autowired
  SearchService searchService;

  @SuppressWarnings("unchecked")
  @RequestMapping(method = RequestMethod.GET,produces = "application/json; charset=UTF-8")
  @ResponseBody
  public String loadWikiInfo(HttpServletRequest request,
                             @RequestParam(value = "q", required = true, defaultValue = "") final String query){
    HttpSession session = request.getSession();
    List<List<SimilarLink>> responseMain = (List<List<SimilarLink>>) session.getAttribute("responseMain");
    WikiInfoLocal wikiInfo = searchService.getWikiInfo(responseMain,query);
    return new JSONSerializer().exclude(JsonHelper.STANDARD_EXCLUDE).include("*").serialize(wikiInfo);
  }
}

我收到

java.lang.IllegalStateException:发现不明确的映射。无法映射“/similarsearch”bean 方法

public java.lang.String org.izsearch.controllers.SimilarSearchController.loadSimilarSearchPhrases(javax.servlet.http.HttpServletRequest,java.lang.String) to {[],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json;charset=UTF-8],custom=[]}: There is already 'wiki' bean method

而且我无法使用这些 Controller 中的任何一个。

最佳答案

Spring Api 文档中定义的 Controller 为

Controllers provide access to the application behavior that you typically define through a service interface. Controllers interpret user input and transform it into a model that is represented to the user by the view. Spring implements a controller in a very abstract way, which enables you to create a wide variety of controllers.

所以会更加健壮,适合使用@RequestMapping将请求映射到您的 Controller 。

请这样使用它们

SimilarSearchController.java

@Controller
public class SimilarSearchController {

  @Autowired
  SimilarSearchService similarSearchService;

  @RequestMapping(value="/similarsearch",method = RequestMethod.GET,produces = "application/json; charset=UTF-8")
  @ResponseBody
  public String loadSimilarSearchPhrases(HttpServletRequest request,
                                         @RequestParam(value = "q", required = true, defaultValue = "") final String query){

WikiController.java

@Controller
public class WikiController {

  @Autowired
  SearchService searchService;

  @SuppressWarnings("unchecked")
  @RequestMapping(value="/wiki",method = RequestMethod.GET,produces = "application/json; charset=UTF-8")
  @ResponseBody
  public String loadWikiInfo(HttpServletRequest request,
                             @RequestParam(value = "q", required = true, defaultValue = "") final String query){

Basic tutorial about RequestMapping Usage

Detailed tutorial about RequestMapping,RequestParam and PathVariable Usage

关于java - 如何解决spring mvc映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32200590/

相关文章:

java - Spring MVC (4.3.3) - RestController 使用直接字段访问获取请求参数

java - 在 Struts 2 中重用自定义表达式 validator

java - 获取用户界面 :param value in Managed bean

java - 如何通过链接列表中的属性删除对象?

java - Canvas 上的 Android 中心文本

spring - 将 BASIC 身份验证数据传递到 spring ws 客户端

java - Spring Controller 路径不被视为常量

java - H2 org.h2.jdbc.JdbcSQLException 与正确的 DDL sql : error code = [42000-196]

java - spring框架如何管理循环依赖

java - Spring MVC : tag form: not interpreted