如何在RestEasy响应中将属性作为字符串发送?

时间:2014-07-08 16:37:59

标签: web-services rest jax-ws resteasy

我有一个名为Product的类,它有一个名为id的类型为long的属性。下面是班级

public class Product {
    private long id;
}

id的值超出了javascript可以处理的值。看到以下链接后我才意识到这一点

Parse json in javascript - long numbers get rounded

我不想在域类中将字段声明为String。但是我想对RestEasy说它必须在json响应中将值作为字符串发送。

我该怎么做?我不想使用任何第三方API。是否有可能在RestEasy。我已经阅读了文档,但没有找到任何此类注释,或者可能是我没有正确浏览文档。

任何人都可以帮忙。提前全部谢谢。

1 个答案:

答案 0 :(得分:1)

如果你使用Jackson作为JSON Serializer,你可以扩展JacksonJsonProvider:

@Provider
public class JsonProvider extends org.codehaus.jackson.JacksonJsonProvider {

    public JsonProvider() {
        ObjectMapper objectMapper = locateMapper(ObjectMapper.class, MediaType.APPLICATION_JSON_TYPE);
        objectMapper.configure(org.codehaus.jackson.JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS, true);
    }

}

如果您使用Jettison,可以register a custom XmlAdapter

public class LongAdapter extends XmlAdapter<String, Long> {

    @Override
    public String marshal(Long id) throws Exception {
        if (id == null) {
            return "";
        }
        return id.toString();
    }

    @Override
    public Long unmarshal(String id) throws Exception {
        return Long.parseLong(id);
    }

}