我延长HandlerMethodArgumentResolver
获得通过自定义注释是否有可能从MethodParameter对象中获取参数的值?
@RequestMapping(value = "/cases/{caseId}", params = "meta",
method = PUT, produces = APPLICATION_JSON_VALUE)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public String updateUIMetadata(
@RequestBody
@JsonData(schemaLocation = "schema/metadata_schema.json")
final String metadataJson) {
}
我想在我在我的课串metadataJson
获得的价值保持注释的参数保持,特别是在resolveArgument
方法。我知道它有一个MethodParameter
参数,但是有可能获得与Web请求一起传递的参数的实际值吗?
public class UpdateMetadataInterceptor implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(JsonData.class);
}
@Override
public String resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
System.out.println("Inside UpdateMetadata");
// TODO something with metadataJson
}
}
“resolveArgument”的用途是**提供**将绑定到参数的值。 Spring会调用你的'UpdateMetadataInterceptor#resolverArgument',获取它的返回值,并用它调用'updateUIMetadata'。 –
在这种情况下,使用'@ RequestBody'和'@ JsonData'注释参数是没有意义的。 Spring将只使用一个'HandlerMethodArgumentResolver'('@ RequestBody')来产生一个参数。 –
[阅读此文](http://stackoverflow.com/questions/18944627/form-submit-in-spring-mvc-3-explanation/18944736#18944736) –