将struts2从2.3.7升级到2.3.33后,JSONWriter.setDateFormatter的NoSuchMethodError

时间:2018-01-03 09:25:10

标签: java json ajax maven struts2

我将struts2从2.3.7升级到2.3.33(使用maven)。使用版本2.3.7时,我的Web应用程序运行没有任何问题,在升级到2.3.33后,我在尝试访问包含对服务器的ajax调用的网页时收到以下异常。

  

java.lang.NoSuchMethodError:   org.apache.struts2.json.JSONWriter.setDateFormatter(Ljava /郎/字符串;)V     在   org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:106)[struts2的-JSON-插件-2.3.33.jar:]     在   org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:203)[struts2的-JSON-插件-2.3.33.jar:]     在   org.apache.struts2.json.JSONResult.execute(JSONResult.java:177)[struts2的-JSON-插件-2.3.33.jar:]     在   com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:372)[XWork的核 - 2.3.33.jar:2.3.33]     在   com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:276)[XWork的核 - 2.3.33.jar:2.3.33]     在   org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)[struts2的核 - 2.3.33.jar:2.3.33]     在   com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245)[XWork的核 - 2.3.33.jar:2.3.33]     在   com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168)[XWork的核 - 2.3.33.jar:2.3.33]     在   com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)[XWork的核 - 2.3.33.jar:2.3.33]     在   com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245)[XWork的核 - 2.3.33.jar:2.3.33]     在   com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)[XWork的核 - 2.3.33.jar:2.3.33]     在   com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245)[XWork的核 - 2.3.33.jar:2.3.33]

当我的Java Action将json响应发送回客户端时,会发生错误。以下是我使用的ajax调用:

  $.ajax({
        url :  "list-sample-json",
           //   data : options.data,
           //   dataType : "json",

        type: "POST",
        data: JSON.stringify({ sortParameters : sortParametersList, pageSize:options.data.pageSize, skip:options.data.skip }),
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        success : function (result) {
        options.success(result);
        },
        error : function (response, status, error) {
        openErrorDialog(response, status, error);
                                    }
    });

访问我的操作没有任何问题,并返回SUCCESS。如上所述,当struts为客户端生成JSON响应时,似乎会出现问题。下面也是我的Java类,json作为结果类型。

@Result(name = "success", type = "json", params = { "ignoreHierarchy", "false",
        "includeProperties", "textsampleList.*, count" })
@Injectable
public class ListSampleJsonAction {

    @Override
    public String execute() {

        List<SampleDTO> sampleList = new ArrayList<>();
        sampleList.add(new SampleDTO("sample")) ;
        return SUCCESS;
    }

}

我想提一下,直到2.3.16.3,上面的实现工作正在进行,我从服务器得到一个响应(带有请求的数据)。 我使用maven 3.0.4和Java 1.7_079。任何人都可以建议可能出错的地方?

1 个答案:

答案 0 :(得分:1)

错误 java.lang.NoSuchMethodError: org.apache.struts2.json.JSONWriter.setDateFormatter(Ljava/lang/String;)V

该方法可在javadoc获得。

来自Github

所以你有@HarKrishan在评论中提到的jar冲突版本。

但如果不是,那么您可能需要在类路径上拥有正确版本的asm库。