- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在扩展HandlerMethodArgumentResolver
以获取由自定义注释注释的参数
@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
}
}
最佳答案
仅当 Spring 无法解析方法的一个或多个参数时,才会调用
HandlerMethodArgumentResolver
。在上面的例子中,一个简单的字符串用@RequestBody
注释。因此,Spring 将能够从 Web 请求中解析它。因此 HandlerMethodArgumentResolver 永远不会被调用。为了实现我想要的目标,我遵循了以下策略
@RequestBody
注释并将其与 @JsonData
注释组合现在,由于 Spring 不知道如何解析 metadataJson
,它将调用 HandlerMethodArgumentResolver
。这里,我们需要实现@RequestBody
的逻辑,从Web请求体中提取字符串。我这样做如下:
public class ValidateJsonSchema implements HandlerMethodArgumentResolver {
@Bean
private RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
return new RequestMappingHandlerAdapter();
}
private RequestResponseBodyMethodProcessor requestResponseBodyMethodProcessor = null;
@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 {
String value = (String) getRequestResponseBodyMethodProcessor()
.resolveArgument(parameter, mavContainer, webRequest, binderFactory);
// do something with value
return value;
}
private RequestResponseBodyMethodProcessor getRequestResponseBodyMethodProcessor() {
if (requestResponseBodyMethodProcessor == null) {
List<HttpMessageConverter<?>> messageConverters = requestMappingHandlerAdapter().getMessageConverters();
requestResponseBodyMethodProcessor = new RequestResponseBodyMethodProcessor(messageConverters);
}
return requestResponseBodyMethodProcessor;
}
}
我使用 RequestMappingHandlerAdapter
获取消息转换器并创建 RequestResponseBodyMethodProcessor
的新实例。然后我调用了同一实例的 resolveArgument
方法,该方法返回了对象,然后将其转换为 String
关于java - 是否可以从 MethodParameter 对象中获取参数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132417/
这是我的复合代码: [...] 我也试过这个: removeQuantityAc
我正在扩展HandlerMethodArgumentResolver以获取由自定义注释注释的参数 @RequestMapping(value = "/cases/{caseId}", params =
我写了这段代码: public class CustomData { public int F1 { get; set; } public int F2 { get; set; }
我正在使用 spring boot,并且我正在尝试设置一个测试场景,在该场景中,我使用mockito 来调用一个 bean,并调用模拟的 JPARepository。 相关代码如下: 存储库 @Rep
问题很简单: 有一个命名空间 xmlns:local= "clr-namespace:Notify" . 有一个“通知”类。该类位于解决方案中 有一个 XAML 代码: 在这种形式下,一
我在 DataGrid 中有两个 DataGridComboBoxColumns(技术上是 DataGridTemplateColumns)。我正在使用 MVVM。 第一列的 ItemsSource
我是一名优秀的程序员,十分优秀!