2年前 (2022-06-27)  微服务 |   抢沙发  923 
文章评分 0 次,平均分 0.0
[收起] 文章目录

另一个琐碎而无用的映射。控制器将snake_case参数映射到camelCase,如下所示:

@GetMapping("/employee")
@ResponseStatus(HttpStatus.OK)
public EmployeeDto findByName(
       @RequestParam("first_name") String firstName,
       @RequestParam("last_name") String lastName) {
    return employeeService.findEmployeeByFirstName(firstName,
                                                   lastName);
}

有一个更简单的方法。你可以向项目中添加转换器。我编写了一个OncePerRequestFilter,来转换请求。源代码并不令人兴奋,因此只需将其指向我的GitHub存储库即可:https://github.com/stephanrauh/SpringBoot/blob/main/snake_case_parameters/src/main/java/de/beyondjava/tech/SnakeCaseApplicationConfiguration.java

有了转换器,用户是否使用camel-casesnake-case参数调用API无关紧要。此外,您的API定义更加清晰:

@GetMapping("/employee")
@ResponseStatus(HttpStatus.OK)
public EmployeeDto findByName(
       @RequestParam(String firstName,
       @RequestParam(String lastName) {
    return employeeService.findEmployeeByFirstName(firstName,
                                                   lastName);
}

JSON对象呢?

有时,你还希望接收带有snake-case参数的JSON对象。将此行添加到应用程序中。属性:

spring.jackson.property-naming-strategy=SNAKE_CASE

现在,每个JSON对象都被转换,无论是输入参数还是返回值。这与我之前展示的转换器不同,它是一个应用程序范围的设置。你不能自由地将camel-case和snake-case参数发送到API。

换句话说,你必须选择一种样式并坚持它。我想你可以编写一个更宽松的转换器作为OncePerRequestFilter,但我还没有尝试。

把它包起来

首先,编写这样的转换器是否是一个好主意仍然是个问题。诚实的回答:我不确定。如果你正在写一个可爱的微服务,那就去做吧。但随着微服务发展成为一个包含数百个REST控制器的成熟应用程序,我不确定。可能有一些我还没有想到的角落案例。

另一方面,只要你和你的客户知道你在做什么,就试试看,尤其是如果你在一个绿地项目中。这允许Java和JavaScript程序员使用他们熟悉的驼峰大小写符号来使用API,Python程序员可以使用snake大小写符号。

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2684.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册