【问题标题】:Handle errors passing wrong date format for cxf处理为 cxf 传递错误日期格式的错误
【发布时间】:2017-04-01 14:05:20
【问题描述】:

我正在使用 cxf 服务器进行休息 web 服务,提供一个以 SimpleDateFormat 作为日期格式的杰克逊提供程序 如此处所述

How do I configure the date format the server returns using CXF JAX-RS and Jackson 2 in XML?

它可以提供为其定义的日期时间格式,而不是产生服务器错误。

目标是转换收到的日期并转换它或向客户端返回描述错误

遵循 xml 配置

<bean id="dataFormat" class="java.text.SimpleDateFormat">
    <constructor-arg type="java.lang.String" value=" yyyy-MM-dd'T'HH:mm:ssXXX" />
</bean>


<bean id="jaxbAnnIntrospector" class="org.codehaus.jackson.xc.JaxbAnnotationIntrospector" />

<bean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper">
    <property name="serializationConfig.annotationIntrospector"
            ref="jaxbAnnIntrospector" />
    <property name="deserializationConfig.annotationIntrospector"
            ref="jaxbAnnIntrospector" />
    <property name="dateFormat" ref="dataFormat" />
</bean>

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider">
    <property name="mapper" ref="objectMapper" />
</bean>

<jaxrs:providers>
            ...
    <ref bean="jsonProvider" />
            ...
</jaxrs:providers>

服务器错误:

java.lang.NoSuchMethodError: javax.ws.rs.ServerErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;)Ljavax/ws/rs/core/Response;
    at javax.ws.rs.ServerErrorException.<init>(ServerErrorException.java:101)
    at javax.ws.rs.InternalServerErrorException.<init>(InternalServerErrorException.java:80)
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:242)
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:98)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:218)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:163)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:163)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)

提前致谢

【问题讨论】:

  • 请发布“提供为其定义的日期时间格式而不是产生服务器错误”的代码
  • 更新帖子@IvanPronin

标签: java json rest cxf


【解决方案1】:

此错误很可能指向某些 Java 版本/jar/类路径内容问题。因此,问题不在于日期格式本身,而在于您的项目设置。

很难直接说出是什么原因造成的,但我建议使用通用故障排除指南来解决此类问题:How do I fix a NoSuchMethodError?

【讨论】:

  • 抱歉,由于该日期字段的 Dto 无效,因此它不是这样的方法。所以它在执行休息方法之前失败,因为 cxf 异常...传递正确的格式它可以工作...
  • 不,这个错误告诉JVM找不到处理适当任务的方法。对于不正确的 dateTime 格式,异常类会有所不同,例如ParseException
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多