Spring MVC中视图解析会带上请求路径

  Spring MVC中返回视图名之后,对于在类上定义的请求路径的请求是没有问题的,但是对于更下一级的请求会出现视图路径解析错误,导致解析的路径最前面会加上请求的路径:

@Controller
@RequestMapping("spittles")
public class SpittleController {
private SpittleRepository spittleRepository;

@Autowired
public SpittleController(SpittleRepository spittleRepository) {
this.spittleRepository = spittleRepository;
}

@RequestMapping(value="/{spittleId}", method=RequestMethod.GET)
public String spittle(
@PathVariable("spittleId") long spittleId,
Model model) {
model.addAttribute("spittle", spittleRepository.findOne(spittleId));
return "spittle";
}

@RequestMapping(method= RequestMethod.GET)
public String spittles(
@RequestParam(value = "max", defaultValue = "10") long max,
@RequestParam(value = "count", defaultValue = "10")int count,
Model model) {
model.addAttribute("spittleList", spittleRepository.findSpittles(Long.MAX_VALUE, 20));
return "spittles";
}
}

对于上面的Controller在请求时会出现如下图所示的错误:

 

 

 解析出来的视图路径上会多一个spittles,但是如果是直接请求http://localhost:8080/spittles就可以获取正确的结果,在网上查找后得知是因为视图解析器配置错误,在WEB/views/前面少一个/。正确配置如下,这是由于相对路径引起的。相对路径前不带斜杠时,表示该路径为当前资源路径的一个子路径 ,相对路径前带斜杠时,开头的路径表示该路径为根路径的一个子路径。

@Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

 

 

posted @ 2020-11-16 22:09  不皮的皮卡丘  阅读(277)  评论(0)    收藏  举报