gpt4 book ai didi

java - Spring Boot 反序列化蛇形案例到 Camel 案例失败。无法将 "some_value"反序列化为 "someValue"

转载 作者:行者123 更新时间:2023-11-29 08:23:48 24 4
gpt4 key购买 nike

所以我有这个 Spring Boot 应用程序,它必须向具有 someValue 和 someOtherValue 属性的对象发送带有参数“some_value=1500&some_other_value=50000”的 GET 请求。

我尝试过 @JsonProperty("some_value") 但没有成功。我已将“spring.jackson.property-naming-strategy=SNAKE_CASE”添加到我的 application.properties 文件中,但它仍然不起作用。

重要细节:当我尝试序列化一个对象时,它确实会变成 someValue => some_value 和 someOtherValue => some_other_value。所以我知道配置是“很好”,但它拒绝将蛇形案例中的请求参数映射到我需要的驼峰案例。 (不......我无法控制请求格式。我在蛇形大小写中获取参数,并且必须将它们映射到驼峰大小写)

请帮忙。谢谢!

最佳答案

另一种方法是创建一个HandlerMethodArgumentResolver。它很冗长,但您可以处理查询字符串、注入(inject) ObjectMapper(保持相同的配置)并自行进行转换。

我创建了一个注释来过滤我想要处理的类型:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface QueryStringArgResolver {
}

然后创建解析器:

@Component
public class QueryStringArgumentResolver implements HandlerMethodArgumentResolver {

...

@Autowired
private ObjectMapper mapper;

@Override
public boolean supportsParameter(final MethodParameter methodParameter) {
return methodParameter.getParameterAnnotation(QueryStringArgResolver.class) != null;
}

@Override
public Object resolveArgument(final MethodParameter methodParameter,
final ModelAndViewContainer modelAndViewContainer,
final NativeWebRequest nativeWebRequest,
final WebDataBinderFactory webDataBinderFactory) throws Exception {

final HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();
final String json = qs2json(request.getQueryString());
final Object a = mapper.readValue(json, methodParameter.getParameterType());

return a;
}

...
}

用法:

@ResponseStatus(HttpStatus.OK)
@GetMapping("/some-url")
public SomeResponse doSomething(@QueryStringArgResolver final SomeQueryStringToBind request) {
...
}

顺便说一句,不要忘记以这种方式注册您的解析器以便能够注入(inject) bean:

@Configuration
public class ArgumentResolverConfig implements WebMvcConfigurer {
@Autowired
private QueryStringArgumentResolver argumentResolver;

@Override
public void addArgumentResolvers(
final List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(argumentResolver);
}
}

关于java - Spring Boot 反序列化蛇形案例到 Camel 案例失败。无法将 "some_value"反序列化为 "someValue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55203735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com