我正在寻找在DTO上编写方法的优雅解决方案
问题源于DTO上的方法可以在客户端和服务器端使用。当您使用任何客户端或服务器端特定方法时,会出现问题。这通常会导致java.lang.NoClassDefFoundError异常。
我目前正在开发的项目使用GWT和spring。尝试在DTO上格式化日期时遇到此问题。格式方法在调用GWT.create(GlobalConstants.class)时抛出java.lang.NoClassDefFoundError。我正在寻找一种优雅的方法来区分是从服务器端还是客户端调用方法,并相应地调整方法的实现。
答案 0 :(得分:1)
首先,如果您有这样的方法,那么您的对象不仅仅是DTO(by definition,DTO只有访问者和变异者)。
话虽如此,有几种方法可以解决您的对象问题。
NoClassDefFoundError
,请使用com.google.gwt.core.shared.GWT
代替
com.google.gwt.core.client.GWT
。 共享类同时出现在gwt-user.jar
和gwt-servlet.jar
中。GWT.isClient()
来判断您是在客户端还是服务器端,并分支到相应的代码。GWT.create()
可以在GWT客户端上下文之外使用,所以
你可以让它在服务器端工作(你必须提供自己的ClassInstantiator
到com.google.gwt.core.server.ServerGwtBridge.getInstance()#register()
)@GwtIncompatible
对其进行注释(任何此类注释都可以使用,包无关紧要,只有注释名称)和GWT就好像它根本不存在一样。super-source
,以便提供不同的服务器特定和特定于客户端的实现。请参阅the GWT documentation中的“覆盖一个包实现与另一个包”。