谁在S​​pring4 Rest Controller中完成了ViewResolver的工作? &安培;谁在请求后呈现视图?

时间:2017-02-13 23:09:58

标签: rest spring-mvc spring-restcontroller

简单控制器& Tiles View Resolver =>它的工作原理

/**
 * But with
 * Spring4 RestController
 * 
 */
@RestController
public class Home {
  @Autowired
  private IManager<BaseObject> manager;
  public void setManager(IManager<BaseObject> manager) {
      this.manager = manager;
  } 
  @RequestMapping(value = "/listprovider", method = RequestMethod.GET)
  public String listProvider() {
      return this.manager.getAllProvider(); // Message Converter To Json
      // what about the view?
      // what is the secret of view resolver in **Spring Rest**
  }
}

但是使用RestController,渲染只是一个JSON而不是一个视图页面,我想呈现视图页面&amp; JSON数据。

class WeekFunc(Func):
        """
            SQL function call for grouping by WEEK
        """
        def as_mysql(self, compiler, connection):
            self.function = 'WEEK'
            return super(Week, self).as_sql(compiler, connection)


data = queryset.annotate(week=Week('start_time')) \
        .values_list('week') \
        .annotate(some_avg=Avg('field_1')) \
        .order_by('week')

1 个答案:

答案 0 :(得分:2)

@RestController是@Controller和@ResponseBody的组合。

使用@RestController时,响应会以Json格式隐式转换,无需显式声明@ResponseBody。

定义为仅发送定义格式的数据,并且无法使用它来检索任何视图。

如果要从@restcontroller检索页面,则需要使用ModelandView或 编写一个新的控制器并使用@Controller进行注释并返回视图名称,以便查找视图解析器并呈现相应的页面。

您需要在弹簧配置文件

中配置如下所示的视图解析器
@Bean
    public UrlBasedViewResolver urlBasedViewResolver()
    {
        UrlBasedViewResolver res = new InternalResourceViewResolver();
        res.setViewClass(JstlView.class);
        res.setPrefix("/WEB-INF/");
        res.setSuffix(".jsp");
        return res;
    }

因此,当您从控制器返回页面名称时,查看解析程序会在WEB-INF文件夹中查找相应的jsp页面并返回视图。

以下链接供参考

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/ViewResolver.html