gpt4 book ai didi

java - Spring MVC。方法参数字段的默认值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:30 25 4
gpt4 key购买 nike

我有一个带有方法测试的简单 Controller :

 @RequestMapping(produces = "application/json")
@ResponseBody
public HttpEntity<Void> test(Test test) {
return new ResponseEntity<>(HttpStatus.OK);
}

测试类如下所示:

    public class Test {
private String name;
private Date date;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Date getDate() {
return date;
}

@DateTimeFormat(iso= DateTimeFormat.ISO.DATE)
public void setDate(Date date) {
this.date = date;
}
}

而且我需要测试对象字段的默认值。如果我有原始参数,我将能够使用 @RequestParam(required = false, defaultValue = "someValue")。但是对于非原始参数,这种方法似乎不起作用。我看到了几个变体如何处理它:

  • 在构造函数中赋值。不太好,因为我可能会不同的方法需要不同的默认值。
  • 编写自定义 DataBinder。更好,但问题不同默认值仍然存在。
  • 使用默认值编写自定义 DataBinder 和自定义注释。

我是否遗漏了什么,并且有一个内置功能可以解决我的问题?

最佳答案

您可以依靠四个简单的步骤来解决争论,这与您在第三点中所建议的类似。

  1. 创建注释,例如

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TestDefaultValues {
String[] value();
}
  1. 编写解析器,例如

public class TestArgumentResolver implements HandlerMethodArgumentResolver {

public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(TestDefaultValues.class) != null;
}

public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
TestDefaultValues attr = parameter.getParameterAnnotation(TestDefaultValues.class);
String[] value = attr.value();
Test test = new Test();
test.setName(value[0]);
test.setDate(new Date(value[1]));
return test;
}

}
  1. 注册解析器

<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="your.package.TestArgumentResolver"></bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>
  1. 在您的 Controller 方法中使用注释,例如

 public HttpEntity<Void> test(@TestDefaultValues({"foo","11/12/2014"}) Test test) {

实例化日期只是为了获得实现的要点,显然你会使用你的想法

关于java - Spring MVC。方法参数字段的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29469887/

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