【发布时间】:2015-09-03 09:44:18
【问题描述】:
我创建了一个自定义注解@JsonSchema,并在其中实现了@RequestBody 的功能。我的注释将始终用于从 Web 请求中读取 JSON。但我想在进一步传递之前针对模式验证 JSON。为此,我有一个实现 HandlerMethodArgumentResolver
最初,我的注解只与String 一起使用,因此我很容易从RequestResponseBodyMethodProcessor#resolveArgument 获取通用对象,将其转换为字符串,验证它然后返回它。但现在我也想将我的注释与自定义类一起使用。
所以我想了解的是@RequestBody 如何将 Web 请求正文中的 JSON 绑定到兼容类。如果我了解这是如何发生的,我可以先将正文提取为字符串,进行验证,然后将正文绑定到具有我的注释的任何类并返回它。
我目前对resolveArgument的实现
@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
Object value = getRequestResponseBodyMethodProcessor()
.resolveArgument(parameter, mavContainer, webRequest, binderFactory);
return value;
// return validateJson(value, parameter); I need to pass a String here
}
// Using message converters to read from body of web request. Can I parse the message earlier than it is cast to the required object type?
private RequestResponseBodyMethodProcessor getRequestResponseBodyMethodProcessor() {
if (requestResponseBodyMethodProcessor == null) {
List<HttpMessageConverter<?>> messageConverters = requestMappingHandlerAdapter().getMessageConverters();
requestResponseBodyMethodProcessor = new RequestResponseBodyMethodProcessor(messageConverters);
}
return requestResponseBodyMethodProcessor;
}
【问题讨论】:
标签: java json spring spring-mvc annotations