另一个琐碎而无用的映射。控制器将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-case
或snake-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
暂无评论