Skip to content

Commit 8da820b

Browse files
wimdeblauwezhendrikse
authored andcommitted
BAEL-87 - @JsonComponent in Spring Boot (eugenp#1519)
1 parent 2a76b9c commit 8da820b

File tree

6 files changed

+166
-0
lines changed

6 files changed

+166
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.baeldung.jsoncomponent;
2+
3+
import javafx.scene.paint.Color;
4+
5+
public class User {
6+
private final Color favoriteColor;
7+
8+
public User(Color favoriteColor) {
9+
this.favoriteColor = favoriteColor;
10+
}
11+
12+
public Color getFavoriteColor() {
13+
return favoriteColor;
14+
}
15+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.baeldung.jsoncomponent;
2+
3+
import com.fasterxml.jackson.core.JsonGenerator;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
import com.fasterxml.jackson.core.JsonProcessingException;
6+
import com.fasterxml.jackson.core.TreeNode;
7+
import com.fasterxml.jackson.databind.DeserializationContext;
8+
import com.fasterxml.jackson.databind.JsonDeserializer;
9+
import com.fasterxml.jackson.databind.JsonSerializer;
10+
import com.fasterxml.jackson.databind.SerializerProvider;
11+
import com.fasterxml.jackson.databind.node.TextNode;
12+
import javafx.scene.paint.Color;
13+
import org.springframework.boot.jackson.JsonComponent;
14+
15+
import java.io.IOException;
16+
17+
@JsonComponent
18+
public class UserCombinedSerializer {
19+
public static class UserJsonSerializer extends JsonSerializer<User> {
20+
21+
@Override
22+
public void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
23+
jsonGenerator.writeStartObject();
24+
jsonGenerator.writeStringField("favoriteColor",
25+
getColorAsWebColor(user.getFavoriteColor()));
26+
jsonGenerator.writeEndObject();
27+
}
28+
29+
private static String getColorAsWebColor(Color color) {
30+
int r = (int) Math.round(color.getRed() * 255.0);
31+
int g = (int) Math.round(color.getGreen() * 255.0);
32+
int b = (int) Math.round(color.getBlue() * 255.0);
33+
return String.format("#%02x%02x%02x", r, g, b);
34+
}
35+
}
36+
37+
@JsonComponent
38+
public static class UserJsonDeserializer extends JsonDeserializer<User> {
39+
@Override
40+
public User deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
41+
TreeNode treeNode = jsonParser.getCodec().readTree(jsonParser);
42+
TextNode favoriteColor = (TextNode) treeNode.get("favoriteColor");
43+
return new User(Color.web(favoriteColor.asText()));
44+
}
45+
}
46+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.baeldung.jsoncomponent;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.core.TreeNode;
6+
import com.fasterxml.jackson.databind.DeserializationContext;
7+
import com.fasterxml.jackson.databind.JsonDeserializer;
8+
import com.fasterxml.jackson.databind.node.TextNode;
9+
import javafx.scene.paint.Color;
10+
import org.springframework.boot.jackson.JsonComponent;
11+
12+
import java.io.IOException;
13+
14+
@JsonComponent
15+
public class UserJsonDeserializer extends JsonDeserializer<User> {
16+
@Override
17+
public User deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
18+
TreeNode treeNode = jsonParser.getCodec().readTree(jsonParser);
19+
TextNode favoriteColor = (TextNode) treeNode.get("favoriteColor");
20+
return new User(Color.web(favoriteColor.asText()));
21+
}
22+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.baeldung.jsoncomponent;
2+
3+
import com.fasterxml.jackson.core.JsonGenerator;
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.databind.JsonSerializer;
6+
import com.fasterxml.jackson.databind.SerializerProvider;
7+
import javafx.scene.paint.Color;
8+
import org.springframework.boot.jackson.JsonComponent;
9+
10+
import java.io.IOException;
11+
12+
@JsonComponent
13+
public class UserJsonSerializer extends JsonSerializer<User> {
14+
15+
@Override
16+
public void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
17+
jsonGenerator.writeStartObject();
18+
jsonGenerator.writeStringField("favoriteColor",
19+
getColorAsWebColor(user.getFavoriteColor()));
20+
jsonGenerator.writeEndObject();
21+
}
22+
23+
private static String getColorAsWebColor(Color color) {
24+
int r = (int) Math.round(color.getRed() * 255.0);
25+
int g = (int) Math.round(color.getGreen() * 255.0);
26+
int b = (int) Math.round(color.getBlue() * 255.0);
27+
return String.format("#%02x%02x%02x", r, g, b);
28+
}
29+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.baeldung.jsoncomponent;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import javafx.scene.paint.Color;
5+
import org.junit.Test;
6+
import org.junit.runner.RunWith;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.autoconfigure.json.JsonTest;
9+
import org.springframework.test.context.junit4.SpringRunner;
10+
11+
import java.io.IOException;
12+
13+
import static org.junit.Assert.assertEquals;
14+
15+
@JsonTest
16+
@RunWith(SpringRunner.class)
17+
public class UserJsonDeserializerTest {
18+
19+
@Autowired
20+
private ObjectMapper objectMapper;
21+
22+
@Test
23+
public void testDeserialize() throws IOException {
24+
User user = objectMapper.readValue("{\"favoriteColor\":\"#f0f8ff\"}", User.class);
25+
assertEquals(Color.ALICEBLUE, user.getFavoriteColor());
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.baeldung.jsoncomponent;
2+
3+
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import javafx.scene.paint.Color;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.test.autoconfigure.json.JsonTest;
11+
import org.springframework.test.context.junit4.SpringRunner;
12+
13+
import static org.junit.Assert.assertEquals;
14+
15+
@JsonTest
16+
@RunWith(SpringRunner.class)
17+
public class UserJsonSerializerTest {
18+
19+
@Autowired
20+
private ObjectMapper objectMapper;
21+
22+
@Test
23+
public void testSerialization() throws JsonProcessingException {
24+
String json = objectMapper.writeValueAsString(new User(Color.ALICEBLUE));
25+
assertEquals("{\"favoriteColor\":\"#f0f8ff\"}", json);
26+
}
27+
}

0 commit comments

Comments
 (0)