SpringMVC 参数解析器 和 Spring 类型转换

前言

最近同事因为工作忙没时间面试候选人,偶尔会让我临时替补,就这样我作为替补面试官面了一个初级妹子,两个(自称)高级的开发。我面试候选人的习惯就是看他简历写啥我就问啥。他们的简历上都有写熟悉 SpringMVC ,于是我随便问了两个问题就回答的很不理想

  • SpringMVC 的执行流程
  • 前端传递 ?username=xx&password=xxcontroller 中就能自动用 User 对象来接收,这是如何实现的?

第一个问题应该比较简单,随便背背就好了,然而两个高级开发也是回答的很模糊......

第二个问题对于初级开发来说可能是相对有难度,但是对于 5-10 年的高级开发连边都答不上,我觉得这是很不应该的,我的要求很简单,并不是要候选人把完整的源码流程说出来,只要候选人能够答道 参数解析器/类型转换器,我就觉得这个问题可以过了。

PS 最让我伤心的是候选人税前年薪 40w +,期望年薪 50w + 都快到我三倍了......然后居然这些基础都答不上,消息队列和缓存中间件的应用场景也回答的模模糊糊,随便提个问题就答不上了。于是我只能安慰自己,他们肯定是来面管理岗的!薪资高正常......对,就是这样!!!

灵魂拷问

让我们先来看一段很常见的代码

@GetMapping("/example/{id}")
public void example(@PathVariable Long id,
                    @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime dateTime,
                    @RequestParam List<Long> ids,
                    @RequestParam Boolean enable,
                    @RequestParam ExampleEnum exampleEnum,
                    User user) {
    log.info(id.toString());
    log.info(dateTime.toString());
    log.info(ids.toString());
    log.info(enable.toString());
    log.info(exampleEnum.toString());
    log.info(user.toString());
}
复制代码

然后我们写个测试模拟 HTTP 请求

@Test
void example() throws Exception {
    mvc.perform(
                    get("/example/1")
                            .param("dateTime", "2020-09-02T16:00:01")
                            .param("ids", "1,2,3")
                            .param("enable", "no")
                            .param("exampleEnum", "ONE")
                            .param("username", "暮色妖娆丶")
            )
            .andExpect(status().isOk());
}
复制代码

再来看打印的日志

: 1
: 2020-09-02T16:00:01
: [1, 2, 3]
: false
: ONE
: User(username=暮色妖娆丶)
复制代码

这样的代码我们几乎每天都在写,但是你有没有想过

  • 为什么传的 1,2,3 能自动转为 List<Long>
  • 为什么传的 no 能够被转为布尔类型的 false
  • 为什么传的 username 就能被自动封装到 user 中?
  • 为什么传的 ONE 就能被自动封装到 ExampleEnum 中?

如果你提出疑问,我会用不就行了?为什么要理解它是怎么实现的?

SpringMVC 执行流程

在搞清楚上述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值