Я расширение 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
, но можно ли получить фактическое значение параметра, которое передается вместе с веб-запросом?
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'. Весна будет использовать только один 'HandlerMethodArgumentResolver' (тот, который для' @ RequestBody') для создания аргумента. –
[Read this.] (Http://stackoverflow.com/questions/18944627/form-submit-in-spring-mvc-3-explanation/18944736#18944736) –