我想让我的查询参数类是不可变的(通过构造函数设置公共final字段)。有没有一种方法可以通过构造函数强制SearchQueryParam实例的创建,并且不公开可怕的getters/setter?
下面是工作的示例代码:
@RequestMapping(value = "/search", method = GET, produces = APPLICATION_JSON_VALUE)
public List<Result> search(SearchQueryParam searchQueryParam) {
//do stuff;
}
public class SearchQueryParam {
@DateTimeFormat(iso = DATE_TIME)
private DateTime from;
@DateTimeFormat(iso = DATE_TIME)
private DateTime to;
public DateTime getFrom() {
return from;
}
public void setFrom(DateTime from) {
this.from = from;
}
public DateTime getTo() {
return to;
}
public void setTo(DateTime to) {
this.to = to;
}
}
但我希望我的SearchQueryParam类更像这样:
public final class SearchQueryParam {
@DateTimeFormat(iso = DATE_TIME)
public final DateTime from;
@DateTimeFormat(iso = DATE_TIME)
public final DateTime to;
public SearchQueryParam(DateTime from, DateTime to) {
this.from = from;
this.to = to;
}
}
您可以为此使用WebArgumentResolver。首先,您必须这样编写自己的解析器
public class MySpecialArgumentResolver implements WebArgumentResolver {
public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) {
if (methodParameter.getParameterType().equals(MySpecialArg.class)) {
return new MySpecialArg("myValue");
}
return UNRESOLVED;
}
}
之后,您需要在spring中注册这个解析器
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean id="mySpecialArgumentResolver" class="..MySpecialArgumentResolver ">
</bean>
</mvc:argument-resolvers>
您可以通过实现自己的WebArgumentResolver来阅读Spring MVC控制器中的Use immutable objects以获得更多详细信息。在这篇文章中使用了旧的样式,在Spring3.1之后,他们增加了HandlerMethodArgumentResolver,您可以使用它。这里是新版本stackoverflow post的示例
我正在使用Apollo Angular并托管一个GraphQL驱动的服务器。我试图实现的请求很简单。我需要传递一个对象作为我请求的查询参数。这是我的请求: 查询定义为: 服务器上的我的架构定义为: 当我的解析器功能 我想知道是否允许输入作为查询中的参数,如果不允许,我应该使用什么样的模式或实践。 如果可能,我不希望我的在代码中显式地包含每个参数。 非常感谢。 编辑:已解决,解析程序函数中的行为,从
但结果是一样的。 这是我的.hbm.xml文件中的内容: 对于用户: 我做错了什么?如果查询参数不是“简单”类型,我需要做一些特殊的事情吗?
我试图在我的存储库中编写一个类似的查询方法 在执行代码时,我遇到了以下错误: 组织。postgresql。util。PSQLException:无法推断用于java实例的SQL类型。时间瞬间使用带有显式类型值的setObject()指定要使用的类型。 我是忘记了什么,还是Spring Data Jdbc根本不支持使用Instant作为参数?如果有,将来是否计划提供这种支助?
我正在编写一个Fast API服务器,它接受请求,检查用户是否被授权,如果成功,则将其重定向到另一个URL。 我需要携带URL参数,例如
我正在使用ASP.NET 5 如果我将其中一个命令模型名称更改为不同的名称,那么Swagger就可以工作了。然而,我相信这个嵌套类模型名称是合法的,也应该与swagger一起使用。如果有办法解决这个问题。谢谢
问题内容: 我在Controller内部有一个Action函数,该函数被AJAX调用。该操作采用1个参数。在客户端,我构造了一个JSON对象,该对象应序列化为该1参数。我遇到的问题是参数类被声明为抽象。因此,它不能被实例化。 当AJAX击中该动作时,我得到以下信息: 无法创建抽象类。 堆栈跟踪: [MissingMethodException:无法创建抽象类。] System.RuntimeTyp