Krishna Chaitanya
Krishna Chaitanya

Reputation: 2663

How to send a property as a string in RestEasy response?

I have a class called Product which has a property called id of type long. Below is the class

public class Product {
    private long id;
}

The value of id is beyond the value which javascript can handle. I realized this after seeing the below link

Parse json in javascript - long numbers get rounded

I dont want to declare the field as String in the domain class. But I want to say to RestEasy that it has to send the value as a string in the json response.

How can I do this? I dont want to use any third party api. Is it possible in RestEasy. I have gone through the documentation but did not find any such annotation or may be I did not go through the documentation properly.

Can anyone please help. Thanks all in advance.

Upvotes: 0

Views: 308

Answers (1)

lefloh
lefloh

Reputation: 10961

If you are using Jackson as JSON Serializer you can extend the 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);
    }

}

If you are using Jettison you can 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);
    }

}

Upvotes: 1

Related Questions