如果我的controller写成:
可以通过代理访问/heat/map/basic-map,但是返回的是
返回的结果由于@RestController,视图解析器不能识别html页面。
所以返回的json格式的数据,体现为字符串。
如果我想返回html格式的页面怎么办?用@Controller替代@RestController
访问结果直接访问相应的微服务正常返回html页面。
为什么用zuul做代理就找不到页面?
经过一番折腾,问题是解决了。问题出在注解上,合理使用注解才能配合zuul好好工作。
先来看看注解: @Controller
public @interface Controller {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation =Component.class)
String value()default "";
}
该注解是一个类型注解,只有一个属性 value,默认是空,如果设置了它代表是个组件名字。
例如: @Controller(value ="/heat")//controller的名字是"/heat"
其实这一点有点坑爹,既然是名字,属性名应该写成name,写成value有点误导我了。
我们知道一个类如果使用了注解@Controller,那其实就是将一个Bean放进了Spring容器,此处这个Bean是一个Handler,名字叫“/heat”。
再来研究@RestMapping这个注解
给这个映射起名字 路径相关 与可变参数配合使用@Controller(value= “/heat”)与路由配置中的/heat相对应就可以访问这个资源了。
api-heat:
path: /heat/**
serviceId: network-monitoring-heatmap-platform-service
问题解决了,必须找到相应的controller才可以。
还有一种办法,真实地url中不体现“/heat”.
网友评论