Skip to content
Advertisement

Jackson adds backslash in json

I’m building REST service on Jersey and using Jackson to produce JSON from java classes of my model. Model with absolutely simple values, I think this is the most typical case. But I get strange result:

JavaScript

My expecting result:

JavaScript

My source values of fields does NOT contains any special characters. These are simple words.

There’re my Java classes. Entity:

JavaScript

Class of rest service:

JavaScript

I’ve tried to use annotation @JsonRawValue for string properties:

JavaScript

But result in this case was:

JavaScript

And I expect:

JavaScript

It’s obvious that Jackson somehow escapes the quotes in result json of response. But why does it do it, and most importantly how to avoid that? By themselves they are just strings! Without any quotes or special characters.

I use Java 7 and Jackson 2.6.1. And Postman to test result. Any ideas for fix of my problem?

Advertisement

Answer

Looks like you are over complicating your JAX-RS resource class.

To use Jackson as a JSON provider for Jersey 2.x, you don’t need to create an ObjectMapper instance like that. There’s a better way to achieve it. Keep reading for more details.

Adding Jackson module dependencies

To use Jackson 2.x as your JSON provider you need to add jersey-media-json-jackson module to your pom.xml file:

JavaScript

Registering the Jackson module

Then register the JacksonFeature in your Application / ResourceConfig subclass:

JavaScript
JavaScript

If you don’t have an Application / ResourceConfig subclass, you can register the JacksonFeature in your web.xml deployment descriptor. The specific resource, provider and feature fully-qualified class names can be provided in a comma-separated value of jersey.config.server.provider.classnames initialization parameter.

JavaScript

The MessageBodyWriter provided by Jackson is JacksonJsonProvider. For more details on how to use Jackson as a JSON provider, have a look at this answer. If you need to customize the ObjectMapper, refer to this answer.

Fixing your resource class

By using the approach described above, you resource class can be as simple as:

JavaScript

When requesting such endpoint, it will give you the expected JSON as result.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement