当前位置: 首页 > 知识库问答 >
问题:

@XMLJavaTypeAdapter不工作

范安歌
2023-03-14
@XmlRootElement(name="info")
@XmlAccessorType(XmlAccessType.NONE)
public class InfoVO  { 
    private int infoId;
    @XmlElement
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date createTime;
//...get/set

}

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.ws.rs.WebApplicationException;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateAdapter extends XmlAdapter<String, Date> {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public String marshal(Date v) {
        return dateFormat.format(v);
    }

    @Override
    public Date unmarshal(String v) {
        try {
            return dateFormat.parse(v);
        } catch (ParseException e) {
            throw new WebApplicationException();
        }
    }
}


    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>jsr250-api</artifactId>
        <version>1.0</version>
    </dependency>

2013-06-12 11:11:13.363:warn::/xa/info/save/12121:org.codehaus.jackson.map.JSONMappingException:无法从字符串值“2013-06-08 08:00:00”构造java.util.date实例:无效表示(错误:无法解析日期“2013-06-08 08:00:00”:与任何标准形式(“yyyy-mm-dd't'hh:mm:ss.sssz”、“yyyy-mm-dd't'hh:mm:ss.sss'z'”、“eee,dd MMM”yyyy hh:mm:ssszz“、”yyyy-mm“)不兼容-dd”))在[源:java.io.StringReader@b0ff5e1;行:8,列:23](通过引用链:com.xchange.me.vo.infovo[“CreateTime”])

共有1个答案

龙昊焱
2023-03-14

当我添加了一个定制的MessageBodyReader时,我找到了根本原因,

  @Provider
    @Consumes("application/json")
    public class CustomJsonReader<T> implements MessageBodyReader<T> {
        @Override
        public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
            return true;
        }

    @Override
    public T readFrom(Class<T> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders,
            InputStream entityStream) throws IOException, WebApplicationException {

        /*
         * Copy the input stream to String. Do this however you like. Here I use
         * Commons IOUtils.
         */
        StringWriter writer = new StringWriter();
        IOUtils.copy(entityStream, writer, "UTF-8");
        String json = writer.toString();

        /*
         * if the input stream is expected to be deserialized into a String,
         * then just cast it
         */
        if (String.class == genericType)
            return type.cast(json);

        /*
         * Otherwise, deserialize the JSON into a POJO type. You can use
         * whatever JSON library you want, here's a simply example using GSON.
         */
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.readValue(json, type);
    }
    }

因此,当收到json数据时,总是进入readFrom方法,然后在返回ObjectMapper.ReadValue(json,type)行中抛出异常

所以我认为根本原因是ObjectMapper.ReadValue忽略了注释@XMLJavaTypeAdapter

 类似资料:
  • 我有下面的restcontroller,想用< code>thedate=2016-08-08格式获取-查询控制器。 它应该自动转换为。但是我的 无法正常工作。为什么? 结果: “thedate”:无法将类型[java.lang.String]的属性值转换为属性“thedate”所需的类型[Java . time . local date];嵌套异常为org . spring framework

  • 我得到了一个XSD,其中包含一个字段。我希望生成的代码使用,这样我就可以对其应用现有接口。(该字段是必填字段,并且永远不会超过32位范围,它应该是)。 使用XJB,我可以更改生成代码中的类型。但是在创建时,这给了我一个错误。 这将生成以下代码 虽然这适用于代码生成,但它在编组时失败,并在创建上下文时引发以下异常。 如果我手动向注释添加一个type参数,问题就解决了,但是我找不到让JAXB为我做这件

  • 我想在菜单栏文本被选中时更改它的颜色。 这里可能出了什么问题? 我尝试使用伪类':active',但没有得到应用。其中as':Hover'正在工作。 我还尝试使用'Router LinkActive',它应该添加类'Active-Link',但这也不起作用。 我在下面给出了HTML、SCCS和TS代码:

  • 我编写了一组简单的类,向一位朋友演示如何为AOP(而不是xml配置)使用注释。我们无法使@ComponentScan工作,并且AnnotationConfigApplicationContext getBean的行为也不正常。我想明白两件事。请参阅下面的代码: PersonOperationSI.java PersonOperations.java PersonOperationsConfigCl

  • 我正在Eclipse Neon中使用Hibernate工具(JBoss tools 4.4.0.Final)。现在,我想将数据库表反向工程为POJO对象和Hibernate映射文件。 我遵循了一些关于如何设置Eclipse来生成POJO对象的教程。在我运行配置之前,一切看起来都很好。什么都没发生,也没有抛出错误。有人能帮我吗?数据库是一个微软SQL服务器2014。 我的逆向工程配置文件看起来像: