我正在使用Spring MVC创建一个可视化编辑器Web应用程序。
visualizaton有一些属性:
public class VisualizationProperties {
double strokeWidth = 1;
Rectangle selectedArea;
}
每个浏览器会话都应该有一个,所以我将其定义为会话范围的bean:
@Component
@Scope("session")
public class VisualizationProperties {
...
因为我想从服务访问它。。。
@Service
public class VisualizationService {
@Resource
private VisualizationProperties properties;
public void createVisualization () {
//create visualization using properties
...
}
}
...我通过代理定义访问:
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class VisualizationProperties {
...
将成员设为私有并向其添加getters setter。
到目前为止都很完美。
现在,我希望客户端能够读取和更新属性。
因此,我将bean更改为控制器,并添加访问自身的方法:
@Controller
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class VisualizationProperties {
private double strokeWidth = 1;
private Rectangle selectedArea;
... //getters + setters
@RequestMapping(value="/properties", method=RequestMethod.GET)
public @ResponseBody VisualizationProperties getProperties () {
return this;
}
@RequestMapping(value="/properties", method=RequestMethod.POST)
public @ResponseBody void setProperties (@RequestBody VisualizationProperties newProperties) {
this.strokeWidth = newProperties.strokeWidth;
this.selectedArea = newProperties.selectedArea;
}
}
导致启动时出现以下异常:
非法状态异常:找到不明确的映射
无法将'Visual alizationProperties'bean方法getProperties()映射到{[/Properties],方法=[GET],...}:
这里已经有了arget.visualization属性的bean方法。
为什么会这样?
这里的问题有两个方面。首先,您要注释一个已经用控制器注释的类。
@Controller
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class VisualizationProperties {
其次,您正在使用作用域代理。在这种情况下,Spring将注册两个bean定义。一个名称为实际bean的visualizationProperties,另一个名称为scopedTarget。visualizationProperties将充当创建代理的FactoryBean。
处理程序方法注册过程(对于@Controller
bean和@Request estMap
方法)的工作原理是查找上下文中的所有bean名称、查找它们的类型、扫描该类型的方法并注册这些方法,如果它们用@Request estMap
注释的话。
由于Spring解析了可视化属性
和范围Target.visualization属性
bean名称为VisualizationProperties
类型的bean,具有@Request estMap
注释方法,它将尝试注册两者,第二次失败是因为映射冲突(您不能将两个处理程序映射到同一个请求)。
我建议的解决方案是重构并创建一个专用的@Controller
类(未代理),该类委托给会话范围的VisualizationProperties
bean。
问题内容: 我试图通过使用变量在第一控制器中调用第二控制器的方法。这是我的第一个控制器中的一种方法: 我可以设置的值,但是由于某种原因我不能打电话。控制台显示此错误: TypeError:对象#没有方法’getMainCategories’ 有没有一种方法可以调用上述方法? 编辑: 我使用以下方法同时加载两个应用程序。 我肯定可以在这里使用服务,但我想知道是否还有其他选择可以这样做! 问题答案:
更新Spring Boot 2.3后。0.0版本到2.3版本。1.发布后,domian类转换在控制器方法内停止工作。 这是参考控制器,它在SpringBoot2.3之前工作得非常好。0.1释放 在2.3中。1.RELEASE,当我发出以下请求时,我得到以下错误 2020-06-17 13:07:12.780WARN 574637 --- [ XNIO-1任务-3]. w. s. m. s.Defa
我想处理的情况下401,403,500等只是状态代码应该返回而不是视图。
问题内容: 我在子模块中有一些基于注释的控制器。这些模块被部署为jar文件。 jar文件中基于注释的控制器未加载到spring配置。 我正在使用eclipse中的导出实用程序手动导出jar文件。 有没有人遇到过这个问题? 问题答案: 使用eclipse中的导出实用程序导出jar文件时,有一个选项称为添加目录项。选中此选项并导出jar文件,这将解决问题。
我一直在尝试使用: 使用此链接: 但我有一个错误: 当我换成: 是工作。我能做些什么来和日期一起工作? 谢啦
我试图使用apache kafka二进制文件中的kafka控制台生成器生成消息,并在spring boot中使用消费者设置。消费者使用avro模式。 当消息以json格式生成时,我的消费者抛出异常-“无法序列化”。 我找到了一个解决方案,可以使用“ConFluent Platform 7.1”,它有kafka-avro-console-生产者。它支持avro,但它是企业版。 有没有一种方法可以使用