404找不到请求资源

时间:2017-08-19 06:06:06

标签: spring rest http

我正在使用Spring Framework和宁静的Web服务,我正在尝试使用restful服务创建一个API并使用get方法。我创建了一个方法,我试图让它返回一个字符串,但我得到一个404错误 - 找不到请求的资源。请参阅下面的代码:

@RestController
@RequestMapping("/test")
public class AreaController {

    public RestResponse find(@PathVariable String name, ModelMap model) {
        model.addAttribute("movie", name);
        return "list";
    }
}

我正在使用:localhosr:8080 / MyProject / wangdu

2 个答案:

答案 0 :(得分:3)

发生此错误是因为您忘记添加
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
在找到方法之前:

@RestController
@RequestMapping("/test")
public class AreaController {

    @RequestMapping(value = "/{name}", method = RequestMethod.GET)
    public RestResponse find(@PathVariable String name, ModelMap model) {
        model.addAttribute("movie", name);
        return "list";
    }
}

答案 1 :(得分:1)

请确认:

  1. find方法返回的值是一个值为"list"的String,而find方法声明正在等待RestResponse对象
  2. 例如,如果我有一个RestResponse这样的对象:

    public class RestResponse {
    
        private String value;
        public RestResponse(String value){
            this.value=value;
        }
    
        public String getValue(){
            return this.value;
        }
    }
    

    然后尝试以这种方式返回值:

    public RestResponse find(@PathVariable String name, ModelMap model) {
        model.addAttribute("movie", name);
        return new RestResponse("list");
    }
    
    1. 验证该方法是否具有@RequestMapping注释,其中包含您期望从网址中获取的值

      @RequestMapping(method = RequestMethod.GET, value = "/{name}")

    2. 默认情况下,调用其余资源的正确方法是您在@RequestMapping级别@RestController设置的@RequestMapping("/test")值,在这种情况下可以是: http://localhost:8080/test/myValue

    3. 如果您需要使用不同的上下文路径,那么您可以在application.properties上更改它(用于春季启动)

      server.contextPath=/MyProject/wangdu
      

      在这种情况下,您可以像这样调用api:

      http://localhost:8080/MyProject/wangdu/test/myValue

      以下是此备选方案的完整代码:

      @RestController
      @RequestMapping("/test")
      public class AreaController {
      
      
          @RequestMapping(method = RequestMethod.GET, value = "/{name}")
          public RestResponse find(@PathVariable String name, ModelMap model) {
              model.addAttribute("movie", name);
              return new RestResponse("list");
          }