在我的控制器中,我的控制器方法名称等于requestmapping
url。例如,/list
等于方法名称list
。是否有一种通用的处理程序方法可以缩短我的代码?我不想以这种方式编写每个控制器和方法。我记得.net
mvc有一种配置的常用方法.Spring MVC呢?
@Controller
@RequestMapping(value = "/fooController ")
public class FooController {
@RequestMapping("/list") public String list(...) { ... }
@RequestMapping("/save") public String save(...) { ... }
@RequestMapping("/delete") public String delete(...) { ... }
}
@Controller
@RequestMapping(value = "/basketballController ")
public class BasketballController {
@RequestMapping("/list") public String list(...) { ... }
@RequestMapping("/save") public String save(...) { ... }
@RequestMapping("/delete") public String delete(...) { ... }
}
您可以使用RequestMappingHandlerMapping
和覆盖默认代码
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
RequestMappingInfo info = createRequestMappingInfo(method);
if (info != null) {
RequestMappingInfo typeInfo = createRequestMappingInfo(handlerType);
if (typeInfo != null) {
info = typeInfo.combine(info);
}
}
return info;
}
如您在这里看到的,它尝试从方法解析RequestMapping注释并与Controller类注释组合。
只需替换逻辑即可使用方法名称。
在这里看到类似的逻辑。代替方法名称的是安全检查。
更新:
要测试的课程。对我来说,它有效。MappingHandler我使用方法名称检查是因为存在更多的控制器,错误控制器等。对于真正的解决方案,我将在控制器上引入注释,以从逻辑中排除默认的spring控制器
public class ExtendedRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
RequestMappingInfo info;
if (method.getName().startsWith("test")) {
info = createRequestMappingInfoByMethodName(method);
}
else {
info = super.getMappingForMethod(method, handlerType);
}
return info;
}
protected RequestMappingInfo createRequestMappingInfoByMethodName(Method method) {
RequestMapping requestMapping = AnnotatedElementUtils.findMergedAnnotation(method.getDeclaringClass(), RequestMapping.class);
String path = requestMapping.value()[0] + "/" + method.getName();
return RequestMappingInfo
.paths(path)
.methods(requestMapping.method())
.params(requestMapping.params())
.headers(requestMapping.headers())
.consumes(requestMapping.consumes())
.produces(requestMapping.produces())
.mappingName(requestMapping.name())
.build();
}
}
配置使用映射
@Configuration
public class ExtendedWebMvcConfiguration extends WebMvcConfigurationSupport {
@Override @Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
ExtendedRequestMappingHandlerMapping handlerMapping = new ExtendedRequestMappingHandlerMapping();
handlerMapping.setOrder(0);
handlerMapping.setInterceptors(getInterceptors());
return handlerMapping;
}
@Override @Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
RequestMappingHandlerAdapter adapter = super.requestMappingHandlerAdapter();
adapter.setIgnoreDefaultModelOnRedirect(true);
return adapter;
}
}
控制者
@RestController
@RequestMapping("/common")
public class MethodNameController {
public String test() {
return "test";
}
public String test2() {
return "test2";
}
}
测试班
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MethodNameControllerTest {
@LocalServerPort
private int port;
@Value("${server.contextPath}")
private String contextPath;
private String base;
@Autowired
private TestRestTemplate template;
@Before
public void setUp() throws Exception {
this.base = "http://localhost:" + port;
}
@Test
public void testMethodNameMappingResolving() throws Exception {
TestRestTemplate template = new TestRestTemplate();
String url = base + contextPath + "/common/test";
String res1 = template.getForObject(url, String.class);
assertThat(res1, equalTo("test"));
url += "2";
String res2 = template.getForObject(url, String.class);
assertThat(res2, equalTo("test2"));
}
}
我认为代码(如下)已经优化(只需使用比相同逻辑的初始版本更少的变量) > 在优化过程中,我应该考虑哪些因素? 这是代码(也在jsfiddle上) 这是代码的解释。“处理”函数在数组中查找相同的值,对于每个相同的值,它通过将一个数字挂起到该值来更改值,“数字”表示它在数组中找到的值的计数。 例如arr=["x","x","y","z"]将返回["x(1)","x(2)","y","z"]"y"和"z
如何在PHP Smarty中优化这段代码? 现在我有一个代码让我困惑,有一个简单的代码。 当我搜索需要推送值的代码时。 优化如何发挥作用?我能写到数组吗?如果它可以写入数组,我该怎么办?
了解如何在 Dreamweaver 中清除代码、检查浏览器兼容性、验证 XML 文档并使页面符合 XHTML 规范。 清理代码 您可以自动删除空标签,合并嵌套 font 标签,以及通过其它方法改善杂乱或难以辨识的 HTML 或 XHTML 代码。 有关如何清理从 Microsoft Word 文档生成的 HTML 的信息,请参阅打开和编辑现有文档。 在打开的文档中,选择“工具”>“清理 HTML”
问题内容: 我在Android编程中有以下代码 并持续到btn30 在python中,我通过以下简单代码对其进行优化 在Java编程中我该怎么做?或者我可以做到吗?是否存在简单的代码? 所以有两种方法可以做到 : : 其他方法是GidView Tanks All。 问题答案: 您可以创建一个由组成的数组,并使用method,该方法允许您通过名称获取标识符。 如果有人感兴趣如何仅使用Java获得相同
还有,我的算法的运行时复杂度是多少。
问题内容: 我正在使用此代码来检测图像中的绿色。 问题在于此迭代确实很慢。 如何使其更快?如果使用的是numpy,如何以numpy的方式进行? 问题答案: 简单尝试一下:
**这是我要在旧代码中插入的新项目**<?xml 版本=“1.0”encoding=“UTF-8”?> **插入旧代码时显示v7小部件错误**<?xml 版本=“1.0”编码=“UTF-8”?>
关于使用强化代码注释的名称和语法,我有一个问题。 简短、简短、非常简短的版本是:我正在寻找一个指南/手册,它将列出可用的代码内注释,并为它们的预期用途提供一个示例。专门用于从Fortify扫描结果中省略一组“SQL注入”和“SQL注入:持久性”问题。 TL;博士;细节: 强化版:19.1.0 平台:Java 8;Web App(Weblogic 12.2.1.4.0(12c));Redhat Un