说我有RestController
:
@RestController
@RequestMapping("path")
public class MyRestController {
@GetMapping("path")
public void myMethod(final MyObject object) throws Exception {
...
}
}
默认情况下,Spring使用getter和setter设置object
变量的字段值
如何指定使用直接字段访问?
我尝试使用自定义Configuration
类,但它不起作用。
@Configuration
public class CustomWebMvcConfigurationSupport extends WebMvcConfigurationSupport {
@Override
protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer() {
final ConfigurableWebBindingInitializer initializer = super.getConfigurableWebBindingInitializer();
initializer.setDirectFieldAccess(true);
return initializer;
}
}
答案 0 :(得分:1)
在处理项目时,您不太了解每个XML文件。当使用XML和Java配置的混合时,某些东西可能无法按预期工作(特别是如果您没有仔细阅读Spring文档)。
基本上,如果您已经定义了如下的XML配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans ... [skipped]>
<description>Spring XML configuration</description>
<mvc:annotation-driven />
<context:component-scan base-package="com.my.package" />
</beans>
您尝试自定义扩展WebMvcConfigurationSupport
的网络配置:
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
@Override
protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer() {
final ConfigurableWebBindingInitializer initializer = super.getConfigurableWebBindingInitializer();
initializer.setDirectFieldAccess(true);
return initializer;
}
}
您基本上处理两个不同的实例,一个是Spring使用XML描述创建的,另一个是WebMvcConfiguration
创建的。
我只使用Java配置解决了。
因此,通过这种方式对web.xml
文件进行编码,您可以完全删除XML配置。您可以看到我指定我想要contextClass
参数的注释配置,以及contextConfigLocation
参数的配置类
<servlet>
<servlet-name>SpringDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.my.package.WebMvcConfiguration</param-value>
</init-param>
</servlet>
请记住将@ComponentScan
注释添加到Java类:
@ComponentScan("com.my.package")