推荐阅读:SpringMVC对象绑定时自定义名称对应关系(1)

嵌入式GUI开发:emWin LISTVIEW控件从入门到精通实战指南 在嵌入式系统开发中,图形用户界面(GUI)是连接用户与设备的关键桥梁,其核心在于高效、清晰地展示结构化数据。列表视图(ListView)作为一种基础且强大的数据展示控件,通过表格形式实现了数据与视图的分离,其原理在于将多列数据组织为可滚动、可交互的界面元素。这一设计显著提升了嵌入式HMI的开发效率,避免了开发者重复实现排序、选择、渲染等底层逻辑。从技术价值看,优秀的列表控件能极大优化资源受限环境下的内存使用与渲染性能。其应用场景广泛覆盖工业控制、医疗设备、消费电子等领域,用于显示传感器数据、历史记录或配置菜 阅读详情

原文地址

这个需求来源自一个Post的Controller的请求含有太多的参数,于是想把所有的参数封装到对象中,然后Controller的方法接收一个对象类型的参数,这样后期扩展修改都比较方便,不需要动到方法签名。

有一句俗话说得好,需求是第一生产力,上面的这个需求就催生了这篇文章的一系列调研。

首先,这个需求SpringMVC本身是支持的,你把一个对象放在Controller方法的参数里,SpringMVC本身的支持就能把request中和这个对象属性同名的参数绑定到对象属性上,比如下面这样:

     
1
2
3
4
     
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test(Test test) {
LOG.debug(test.toString());
}

Test中是这样定义的

     
1
2
3
4
5
6
7
8
     
public class Test {
private String test1;
private String test2;
private String test3;
}

由于我使用了lombok,所以没有Getter和Setter方法,大家看demo的时候可以注意下。这个时候我们访问/test?test1=1&test2=2&test3=3,SpringMVC会自动把同名的属性和Request中的参数绑定在一起。

这里写图片描述

到这里貌似可以结题了,开玩笑,哪有这么简单。大家想这样一种情况,在JAVA中我们用的是驼峰命名法(比如:testName),而在前端JS中我们大多用的是蛇形命名法(比如:test_name)。当然,我们可以要求前端在请求接口的时候用驼峰命名法,但是问题不是这样逃避的。另外,如果我前端接口参数的名字和对象里面属性的名字不一样怎么办呢,比如前端接口里参数叫person,但是我对象里的属性叫people,当然这种情况比较少,但是也不排除在各种复杂的需求中会出现这种情况,所以我们这篇文章的目的就是做到自定义的参数名和属性名映射,想让哪个请求参数对应哪个属性都可以,想点哪里点哪里就是这个意思。

这篇文章只讲解决方案,我会在下一篇文中讲一下SpringMVC数据绑定的实现原理。

虽然不细说原理,但是有几个概念还是要提前说一下的,使用SpringMVC时,所有的请求都是最先经过DispatcherServlet的,然后由DispatcherServlet选择合适的HandlerMapping和HandlerAdapter来处理请求,HandlerMapping的作用就是找到请求所对应的方法,而HandlerAdapter则来处理和请求相关的的各种事情。我们这里要讲的请求参数绑定也是HandlerAdapter来做的。大概就知道这些吧,我们需要写一个自定义的请求参数处理器,然后把这个处理器放到HandlerAdapter中,这样我们的处理器就可以被拿来处理请求了。

首先第一步,我们先来做一个参数处理器SnakeToCamelModelAttributeMethodProcessor

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     
public class SnakeToCamelModelAttributeMethodProcessor extends ServletModelAttributeMethodProcessor {
ApplicationContext applicationContext;
public SnakeToCamelModelAttributeMethodProcessor(boolean annotationNotRequired, ApplicationContext applicationContext) {
super(annotationNotRequired);
this.applicationContext = applicationContext;
}
@Override
protected void bindRequestParameters(WebDataBinder binder, NativeWebRequest request) {
SnakeToCamelRequestDataBinder camelBinder = new SnakeToCamelRequestDataBinder(binder.getTarget(), binder.getObjectName());
RequestMappingHandlerAdapter requestMappingHandlerAdapter = applicationContext.getBean(RequestMappingHandlerAdapter.class);
requestMappingHandlerAdapter.getWebBindingInitializer().initBinder(camelBinder, request);
camelBinder.bind(request.getNativeRequest(ServletRequest.class));
}
}

这个处理器要继承ServletModelAttributeMethodProcessor,来看下继承关系
这里写图片描述

看最上面实现的是HandlerMethodArgumentResolver接口,这个接口代表这个类是用来处理请求参数的,有两个方法

     
1
2
3
4
5
     
public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter var1);
Object resolveArgument(MethodParameter var1, ModelAndViewContainer var2, NativeWebRequest var3, WebDataBinderFactory var4) throws Exception;
}

supportsParameter返回是否支持这种参数,resolveArgument是具体处理参数的方法。ServletModelAttributeMethodProcessor是处理复杂对象的,也就是除了int,char等等简单对象之外自定义的复杂对象,比如上文中我们提到的Test。

我们自定义的处理器也是处理复杂对象,只是扩展了可以处理名称映射,所以继承这个ServletModelAttributeMethodProcessor即可。好了,处理器写好了,那么接下来怎么做呢,重写父类的bindRequestParameters方法,这个方法就是绑定数据对象的时候调用的方法。

在这个方法中,我们新建了一个自定义的DataBinder-SnakeToCamelRequestDataBinder,然后用HandlerAdapter初始化了这个DataBinder,最后调了DataBinder的bind方法。DataBinder顾名思义就是实际去把请求参数和对象绑定的类,这个自定义的DataBinder怎么写呢,如下:

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
     
public class SnakeToCamelRequestDataBinder extends ExtendedServletRequestDataBinder {
public SnakeToCamelRequestDataBinder(Object target, String objectName) {
super(target, objectName);
}
protected void addBindValues(MutablePropertyValues mpvs, ServletRequest request) {
super.addBindValues(mpvs, request);
//处理JsonProperty注释的对象
Class<?> targetClass = getTarget().getClass();
Field[] fields = targetClass.getDeclaredFields();
for (Field field : fields) {
JsonProperty jsonPropertyAnnotation = field.getAnnotation(JsonProperty.class);
if (jsonPropertyAnnotation != null && mpvs.contains(jsonPropertyAnnotation.value())) {
if (!mpvs.contains(field.getName())) {
mpvs.add(field.getName(), mpvs.getPropertyValue(jsonPropertyAnnotation.value()).getValue());
}
}
}
List<PropertyValue> covertValues = new ArrayList<PropertyValue>();
for (PropertyValue propertyValue : mpvs.getPropertyValueList()) {
if(propertyValue.getName().contains( "_")) {
String camelName = SnakeToCamelRequestParameterUtil.convertSnakeToCamel(propertyValue.getName());
if (!mpvs.contains(camelName)) {
covertValues.add( new PropertyValue(camelName, propertyValue.getValue()));
}
}
}
mpvs.getPropertyValueList().addAll(covertValues);
}
}

这个自定义的DataBinder继承自ExtendedServletRequestDataBinder,可扩展的DataBinder,用来给子类复写的方法是addBindValues,有两个参数,一个是MutablePropertyValues类型的,这里面存的就是请求参数的key-value对,还有一个参数是request对象本身。request对象这里用不到,我们用的就是这个MutablePropertyValues类型的mpvs。

其实处理的原理很简单,SpringMVC在做完这一步参数绑定之后就会去通过反射调用Controller中的方法了,调用Controller方法的时候要给参数赋值,赋值的时候就是从这个mpvs里面把对应参数name的value取出来。举个例子,我们的样例Controller中的对象时Test,Test有个属性是Test1,那么在给Test1赋值的时候就会从这个mpvs中去取key为Test1所对应的value。可是你想想,前端请求的参数是test_1这样的,所以这个mpvs中只有一个key为test_1的值,那自然就会报错。知道了这种处理方法,就很简单了,我们在这个mpvs中再加一个key为test1,value和test_1的value一样的对象就可以了。

再扩展一点,说到自定义Name,比如test_1对应属性为test2这样,我们用一个有value的注释,比如这里用到的JsonProperty,在test2上加上注释@JsonProperty(“test_1”),这里处理的时候会先把这个注释的值取出来,从mpvs里面查,如果有这个key,那么就把value取出来再加进去一个key为field name的map就可以了。上面SnakeToCamelRequestDataBinder的处理方法大概就是这样了。

然后这里我们抽出了一个工具类,用来处理蛇形string到驼峰string的转换。

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
     
public class SnakeToCamelRequestParameterUtil {
public static String convertSnakeToCamel(String snake) {
if (snake == null) {
return null;
}
if (snake.indexOf( "_") < 0) {
return snake;
}
String result = "";
String[] split = StringUtils.split(snake, "_");
int index = 0;
for (String s : split) {
if (index == 0) {
result += s.toLowerCase();
} else {
result += capitalize(s);
}
index++;
}
return result;
}
private static String capitalize(String s) {
if (s == null) {
return null;
}
if (s.length() == 1) {
return s.toUpperCase();
}
return s.substring( 0, 1).toUpperCase() + s.substring( 1);
}
}

做完了上面这些,应该说处理过程就搞定了,还差最后一步,需要把我们自定义的处理器SnakeToCamelModelAttributeMethodProcessor加到系统的HandlerAdapter中去。方法有很多,如果你不知道HandlerAdapter是什么东西,那八成你用的是系统默认的HandlerAdapter。加起来也很简单。如果你用了

     
1
     
<mvc:annotation-driven>

元素,可以用下面这个方法。

     
1
2
3
4
5
6
7
     
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="package.name.SnakeToCamelModelAttributeMethodProcessor">
<constructor-arg name="annotationNotRequired" value="true"/>
</bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>

如果你用的是JAVA代码配置,可以用

     
1
2
3
4
5
6
7
8
9
10
11
12
     
@Configuration
public class WebContextConfiguration extends WebMvcConfigurationSupport {
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(processor());
}
@Bean
protected SnakeToCamelModelAttributeMethodProcessor processor() {
return new SnakeToCamelModelAttributeMethodProcessor( true);
}
}

像我这边,因为项目需要自定义了HandlerAdapter。

     
1
2
3
     
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
...
</bean>

所以我写了一个注册器,用来把处理器注册进HandlerAdapter,代码如下。

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
     
public class SnakeToCamelProcessorRegistry implements ApplicationContextAware, BeanFactoryPostProcessor {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
RequestMappingHandlerAdapter requestMappingHandlerAdapter = applicationContext.getBean(RequestMappingHandlerAdapter.class);
List<HandlerMethodArgumentResolver> resolvers = requestMappingHandlerAdapter.getArgumentResolvers().getResolvers();
List<HandlerMethodArgumentResolver> newResolvers = new ArrayList<HandlerMethodArgumentResolver>();
for (HandlerMethodArgumentResolver resolver : resolvers) {
newResolvers.add(resolver);
}
newResolvers.add( 0, new SnakeToCamelModelAttributeMethodProcessor( true, applicationContext));
requestMappingHandlerAdapter.setArgumentResolvers(Collections.unmodifiableList(newResolvers));
}
}

看起来可能逻辑比较复杂,为什么要做这一堆事情呢,话要从HandlerAdapter里系统自带的处理器说起。我这边系统默认带了24个处理器,其中有两个ServletModelAttributeMethodProcessor,也就是我们自定义处理器继承的系统处理器。SpringMVC处理请求参数是轮询每一个处理器,看是否支持,也就是supportsParameter方法, 如果返回true,就交给你出来,并不会问下面的处理器。这就导致了如果我们简单的把我们的自定义处理器加到HandlerAdapter的Resolver列中是不行的,需要加到第一个去。

然后ServletModelAttributeMethodProcessor的构造器有一个参数是true,代表什么意思呢,看这句代码

     
1
2
3
     
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(ModelAttribute.class)?true:(this.annotationNotRequired?!BeanUtils.isSimpleProperty(parameter.getParameterType()):false);
}

ServletModelAttributeMethodProcessor是否支持某种类型的参数,是这样判断的。首先,对象是否有ModelAttribute注解,如果有,则处理,如果没有,则判断annotationNotRequired,是否不需要注释,如果true,再判断对象是否简单对象。我们的Test对象是没有注释的,所以我们就需要传参为true,表示不一定需要注解。

以上就是所有的配置过程,通过这一系列配置,我们就可以自定义前端请求参数和对象属性名称的映射关系了,通过JsonProperty注解,如果没有注解,会自动转换蛇形命名到驼峰命名。下面是效果,Demo的Controller依然是这个:

     
1
2
3
4
5
     
@RequestMapping(value = "/test", method = RequestMethod.GET)
@ResponseBody
public void test(Test test) {
LOG.debug(test.toString());
}

Test对象这样写

     
1
2
3
4
5
6
7
8
9
10
     
public class Test {
@JsonProperty("test_1")
private String test1;
private String test2;
@JsonProperty("test_3")
private String test99;
}

这样前端请求的参数中的test_1和test1都会绑定到test1,test_2和test2都会绑定到test2,test_3,test99和test_99都会绑定到test99上。我们试一下这个请求

     
1
     
/test?test_1=1&test_2=2&test_3=3

Log输出如下

这里写图片描述


Python经常遇到导入xlwings就出错,如何解决 Python经常在导入xlwings时遇到错误。有人建议尝试重装或升级xlwings,但这些操作后仍然无法解决导入错误问题。 阅读详情

相关推荐

SAP开发实战:用FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本(附完整ABAP代码)

本文详细介绍了如何使用SAP的FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本,提供完整的ABAP代码实现方案。通过该BAPI,开发者可以高效完成财务凭证的批量修改,确保数据一致性和审计合规性,显著提升SAP财务模块的运维效率。

weixin_29224589的博客 380

SpringMVC对象绑定时自定义名称对应关系

例行推广一下我的博客,喜欢这篇文章的朋友可以看我的博客http://zwgeek.com这个需求来源自一个Post的Controller的请求含有太多的参数,于是想把所有的参数封装到对象中,然后Controller的方法接收一个对象类型的参数,这样后期扩展修改都比较方便,不需要动到方法签名。有一句俗话说得好,需求是第一生产力,上面的这个需求就催生了这篇文章的一系列调研。首先,这个需求SpringMV

zgzczzw的专栏 1万+

电源芯片TPS54560典型应用电路及设计详解

TPS54560 是一款配有集成型高侧 MOSFET 的 60V、5A DC-DC转换器,输入电压范围7-60V,输出电压可通过外部反馈电阻设置成略低于输入电压的任意值。**所以,**R5=31.25KΩ、R6:10KΩ(常用值)时,即可设置输出电压为 3.3V。**所以,**R5=140KΩ、R6:10KΩ(常用值)时,即可设置输出电压为12V。设计 TPS54560 的输出电压时,主要通过外部反馈电阻网络来设置输出电压。因此,输出 3.3V ,输入电压24V时推荐的电感值为 8µH 至 10µH。

weixin_42306872的博客 1万+

绑定SpringMvc GET请求对象时自定义参数名

springmvc get请求对象指定参数名称

qq_39644450的博客 720

STM32 FOC半周期控制延时分析与硬件同步配置

在电机矢量控制(FOC)系统中,数字控制延时是影响电流环带宽、观测器收敛性与系统稳定性的核心瓶颈。其本质源于PWM更新、ADC采样与计算执行之间的时序错配,典型表现为1.5个PWM周期的相位滞后,导致滑模观测器(SMO)失效或高速振荡。通过零阶保持(ZOH)建模可量化该延时对系统相频特性的影响,并揭示其等效为0.5u(t)+0.5u(t−1)的平滑控制律。工程上突破的关键在于重构外设协同机制——以高级定时器重复计数器(RCR0)驱动中心对齐PWM的半周期更新事件,使控制量在0.5T_PWM内生效,同步触发多

flink9streamer的博客 1130

微信小程序真机HTTPS证书链失效排查与修复指南

HTTPS证书信任链是保障Web通信安全的基础机制,其核心在于客户端能否通过服务器提供的证书及其上级签发者,逐级回溯至自身预置的可信根证书。在微信小程序场景中,由于客户端不复用系统根证书库,而是采用固化、精简且更新滞后的自研CA白名单,导致大量符合浏览器标准的证书(如Let’s Encrypt新版ISRG Root X1、TrustAsia等)在真机环境下触发net::ERR_CERT_AUTHORITY_INVALID错误。该问题本质是证书链断裂或签名算法/密钥长度不合规,而非域名配置或CORS策略异常。

weixin_33935636的博客 677

SpringMVC

SpringMVC

冯同学的博客 1309

计算机控制液压同步顶升系统,PLC四点多点同步顶升系统,同步液压顶升系统

PLC同步顶升系统系统可分为5个部分:液压泵站、PLC计算机控制系统、液压终端、位移压力检测与人机界面操作系统,位移同步精度1mm,同步控制点数:4,8,12,16,20,40,80,99;产品特点:高速置零、低速顶升,升降速度可以任意控制;液压千斤顶内置式(或外置)位移、压力传感器、均载阀,保证了顶升系统在恶劣工作环境下的高可靠性;均载阀的过载保护功能,避免了多缸顶升时常见的胀缸事故;先进的进油...

weixin_30093045的博客 1432

Spring MVC获取参数和自定义参数类型转换器及编码过滤器

Spring MVC获取参数和自定义参数类型转换器及编码过滤器

qq_53317005的博客 5329

PCB制造工艺参数到AD规则设置

本文提供了PCB设计与制造的落地指南,强调需先了解PCB厂的工艺参数,再在Altium Designer中设置相应规则。核心步骤包括:获取PCB厂的关键工艺参数(线宽/线距、过孔尺寸等),在AD中设置电气规则、布线规则、阻焊规则等,并进行DRC检查。文章还给出了常见问题避坑建议和快速落地模板,帮助设计师确保设计符合生产要求,避免因工艺不匹配导致的报废或成本增加。

qq_37999850的博客 292

智能手表 BOM 表与版本管理记录

试产与量产阶段 智能手表 BOM 表与版本管理记录

hoony123的博客 1053

如何通过java命令更改对象_java – 如何在绑定spring mvc命令对象时自定义参数名称...

这个解决方案更简洁,但需要使用RequestMappingHandlerAdapter,当< mvc:annotation-driven />启用。希望它会帮助某人。想法是扩展ServletRequestDataBinder像这样:/*** ServletRequestDataBinder which supports fields renaming using {@link Para...

weixin_33277243的博客 242

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SpringBoot(或SpringMVC)的各种参数绑定方式总结

后端开发中会遇到很多前后端参数传递的内容,工作时遇到各种各样的参数传递方式,觉得比较混乱,所以花了一点时间整理总结下来,以便后续开发中能够快速地找到合适的参数绑定方式。 本次主要分为三个模块,一个是基本模式,一个是json模式,一个是通过自定义的工具类处理参数绑定模式。 一、基本模式 1、基本数据类型(以int为例) 在controller中写一个int参数绑定的方法 @GetMapp...

aliyacl的博客 8627

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

[强烈推荐]SpringMVC源码分析

此篇文章比较详细的从源码的角度去分析Spring MVC的运行机制,阅读过后受益匪浅,可以结合自己追踪Spring源代码去理解效果更好,基本能把Spring MVC的请求处理过程串联起来,对自己仿写类似的web框架提供了宝贵的经验和动力,希望和大家一起成长。ps:该博客转载自http://www.cnblogs.com/heavenyes/p/3905844.html【基于源码3.1...

臣本布衣,躬耕于南阳 3万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

推荐阅读 SpringMVC从request到controller过程详解(2)

原文地址 1. 背景 之前一篇文章 SpringMVC对象绑定时自定义名称对应关系 讲了如何去把request中的请求参数指定到对象的某个属性上。但文中只讲了一下做法,没有讲原理,因为这个原理涉及到SpringMVC时怎么处理Request的复杂过程。这篇文章就来和大家扒一扒这件事,SpringMVC是怎么把一个request的请求最终映射到Controller的方法的。这是正

大树叶 技术专栏 575

springMVC接收参数 xml/json

springMVC接收参数 xml/json springMVC参数接收 作为web层框架,可以接受复杂的类型,且很简单 1.接收字符串可以直接写参数类型,参数名称,跟前端传过来的name值一样即可   如果不一样也可以,通过@RequestParam参数来进行映射下,也是可以设置默认值的 2.接收对象的话直接传对象的名称即可,同理@Req...

陈灬大灬海 347

Java八股文面试之框架篇(Spring、SpringMVC、Mybatis、Spring Security)

Java八股文面试之框架篇(Spring、SpringMVC、Mybatis)

y516369的博客 1302

基于混合推荐算法的个性化图书推荐系统的设计与实现-计算机毕设 【课程设计】 09637

注册用户模块: 1.注册与登录:用户可以通过填写必要信息进行账户注册,注册后通过用户名和密码登录系统,享受个性化推荐、图书浏览和评论等功能。 2.首页:用户登录后,首页展示个性化推荐的图书内容,这些推荐基于用户的历史兴趣、行为数据以及混合推荐算法来推送相关书籍。 3.网站公告:网站公告页面展示平台的最新消息和重要通知,确保用户及时了解平台更新、促销活动以及其他相关通知。 4.图书资讯:图书资讯页面提供关于新书发布、作者访谈、行业动态等信息,帮助用户了解最新的图书市场动向和文学趋势。 5.图书信息:每本书都有

WeiXin_DZbishe的博客 990

网易雷火前端实习面经:项目实战与框架原理深度复盘

前端面试通常聚焦于JavaScript、Vue/React等核心技术的理解深度。从事件循环到响应式原理,从闭包到Fiber架构,这些底层概念不仅是面试题的高频考点,更决定了开发者能否在复杂业务中做出合理的技术选型与性能优化。深入理解原理,能帮助我们在项目中更高效地排查问题、设计组件和优化构建流程。大厂实习面试往往通过项目深挖、手写代码和开放性问题来考察这些能力。本文以网易雷火前端实习面试为实战样本,还原了从简历准备、多轮技术面到HR面的完整过程,并总结了项目复盘、算法训练和框架学习的有效方法,为冲刺大厂前端

weixin_34234721的博客 705

springmvc 功能 登出_Spring MVC 中集成 Apache Shiro 安全框架

来源:holynull,www.gitbook.com/book/holynull/-spring-mvc-apache-shiro-/details我们在这里将对一个集成了Spring MVC+Hibernate+Apache Shiro的项目进行了一个简单说明。这个项目将展示如何在Spring MVC 中使用Apache Shiro来构建我们的安全框架。阅读文章前,您需要做以下准备:Maven...

weixin_39781930的博客 148

在Spring MVC中使用Apache Shiro安全框架

我们在这里将对一个集成了Spring MVC+Hibernate+Apache Shiro的项目进行了一个简单说明。这个项目将展示如何在Spring MVC 中使用Apache Shiro来构建我们的安全框架。 阅读文章前,您需要做以下准备: Maven 3环境 Mysql-5.6+ JDK1.7+ git环境 git.oschina.net帐号 Apache Tomcat 7+ ...

javarrr的博客 450

【Java】已解决:org.springframework.web.bind.MissingPathVariableException

该异常通常发生在请求路径中缺少必要的路径变量时。路径变量用于在URL中传递参数,并在控制器方法中使用。当定义的路径变量在请求URL中缺失时,就会抛出此异常。假设我们有一个RESTful服务,用于获取指定用户的详细信息。为了解决该报错问题,我们需要确保路径变量名称的一致性。报错问题,确保Spring MVC应用程序的稳定性和可靠性。如果请求URL中缺少该变量,例如。方法期望从URL路径中接收一个名为。在Spring MVC框架中,注解中的名称一致,从而避免。通过上述代码,我们确保。注解中的路径变量名称与。

屿小夏.的知识博客 1069

webmvcconfigurer不拦截_面试必问的Spring MVC的题集,全部给你整理好了,不收藏血亏...

推荐阅读:从操作系统层面理解Linux下的网络IO模型,这么讲你还不懂?为什么现在都用SSM,不用SSH了呢?它们的区别在哪里?前字节跳动大佬整理出的:Zookeeper、Dubbo面试题总结,码上前言Spring MVC是Spring构建在Servlet API上的Web框架。目前大部分的Java Web 开发已经使用Spring MVC 来做。它提供了模型 - 视图 - 控制器架构,可用于开发...

weixin_39712969的博客 121

SSM框架学习

使用对象时在程序中不要主动使用new产生对象,转换由外部提供对象。Spring技术把IoC思想进行了实现,IoC容器把大量对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean。使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有依赖关系。

weixin_51718998的博客 970

2026毕设ssm+vue礼物盒子论文+程序

本研究针对当前礼物推荐系统存在的场景化不足、情感表达弱化等问题,开发了一个基于Web的"礼物种草"互动平台。系统采用SSM框架和Vue.js技术,构建了包含用户管理、礼物分类、榜单推荐和送礼攻略五大功能模块的闭环系统。创新性地提出"场景-情感-标签"三元向量(SET-Vector)表征方法,结合Elasticsearch实现精准推荐。通过A/B测试验证,该系统能有效提升18.7%的点击率和11.4%的转化率,显著缩短用户选礼时间。研究为社交电商场景下的情感消费提供了新

sheji3010的博客 623

Spring通信传参的方法

接口传参的是一个非常常见的需求。

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 1241
上一篇: Spring MVC 中的基于注解的 Controller
下一篇: 推荐阅读 SpringMVC从request到controller过程详解(2)
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值