commit
						32584a2238
					
				| @ -9,6 +9,33 @@ | ||||
| 
 | ||||
| 	<dependencies> | ||||
| 
 | ||||
| 		<!-- Spring --> | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework</groupId> | ||||
| 			<artifactId>spring-web</artifactId> | ||||
| 			<version>${org.springframework.version}</version> | ||||
| 			<exclusions> | ||||
| 				<exclusion> | ||||
| 					<artifactId>commons-logging</artifactId> | ||||
| 					<groupId>commons-logging</groupId> | ||||
| 				</exclusion> | ||||
| 			</exclusions> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework</groupId> | ||||
| 			<artifactId>spring-webmvc</artifactId> | ||||
| 			<version>${org.springframework.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework</groupId> | ||||
| 			<artifactId>spring-oxm</artifactId> | ||||
| 			<version>${org.springframework.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-web</artifactId> | ||||
|             <version>1.1.9.RELEASE</version> | ||||
|         </dependency> | ||||
| 		<!-- utils --> | ||||
| 
 | ||||
| 		<dependency> | ||||
|  | ||||
| @ -0,0 +1,14 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | ||||
| import org.springframework.boot.SpringApplication; | ||||
| import org.springframework.context.annotation.ComponentScan; | ||||
| 
 | ||||
| @ComponentScan | ||||
| @EnableAutoConfiguration | ||||
| public class Application { | ||||
| 
 | ||||
|     public static void main(String[] args) { | ||||
|         SpringApplication.run(Application.class, args); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,36 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| import com.fasterxml.jackson.annotation.JsonView; | ||||
| 
 | ||||
| public class Item { | ||||
|     @JsonView(Views.Public.class) | ||||
|     public int id; | ||||
| 
 | ||||
|     @JsonView(Views.Public.class) | ||||
|     public String itemName; | ||||
| 
 | ||||
|     @JsonView(Views.Internal.class) | ||||
|     public User owner; | ||||
| 
 | ||||
|     public Item() { | ||||
|         super(); | ||||
|     } | ||||
| 
 | ||||
|     public Item(final int id, final String itemName, final User owner) { | ||||
|         this.id = id; | ||||
|         this.itemName = itemName; | ||||
|         this.owner = owner; | ||||
|     } | ||||
| 
 | ||||
|     public int getId() { | ||||
|         return id; | ||||
|     } | ||||
| 
 | ||||
|     public String getItemName() { | ||||
|         return itemName; | ||||
|     } | ||||
| 
 | ||||
|     public User getOwner() { | ||||
|         return owner; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,10 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| public class ItemManager { | ||||
| 
 | ||||
|     public static Item getById(final int id) { | ||||
|         final User owner = new User(1, "John"); | ||||
|         final Item item = new Item(2, "book", owner); | ||||
|         return item; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,22 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import com.fasterxml.jackson.databind.BeanDescription; | ||||
| import com.fasterxml.jackson.databind.SerializationConfig; | ||||
| import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; | ||||
| import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; | ||||
| 
 | ||||
| public class MyBeanSerializerModifier extends BeanSerializerModifier { | ||||
| 
 | ||||
|     @Override | ||||
|     public List<BeanPropertyWriter> changeProperties(final SerializationConfig config, final BeanDescription beanDesc, final List<BeanPropertyWriter> beanProperties) { | ||||
|         for (int i = 0; i < beanProperties.size(); i++) { | ||||
|             final BeanPropertyWriter beanPropertyWriter = beanProperties.get(i); | ||||
|             if (beanPropertyWriter.getName() == "name") { | ||||
|                 beanProperties.set(i, new UpperCasingWriter(beanPropertyWriter)); | ||||
|             } | ||||
|         } | ||||
|         return beanProperties; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,21 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| import com.fasterxml.jackson.core.JsonGenerator; | ||||
| import com.fasterxml.jackson.databind.SerializerProvider; | ||||
| import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; | ||||
| 
 | ||||
| public class UpperCasingWriter extends BeanPropertyWriter { | ||||
|     final BeanPropertyWriter _writer; | ||||
| 
 | ||||
|     public UpperCasingWriter(final BeanPropertyWriter w) { | ||||
|         super(w); | ||||
|         _writer = w; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void serializeAsField(final Object bean, final JsonGenerator gen, final SerializerProvider prov) throws Exception { | ||||
|         String value = ((User) bean).name; | ||||
|         value = (value == null) ? "" : value.toUpperCase(); | ||||
|         gen.writeStringField("name", value); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,28 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| import com.fasterxml.jackson.annotation.JsonView; | ||||
| 
 | ||||
| public class User { | ||||
|     @JsonView(Views.Public.class) | ||||
|     public int id; | ||||
| 
 | ||||
|     @JsonView(Views.Public.class) | ||||
|     public String name; | ||||
| 
 | ||||
|     public User() { | ||||
|         super(); | ||||
|     } | ||||
| 
 | ||||
|     public User(final int id, final String name) { | ||||
|         this.id = id; | ||||
|         this.name = name; | ||||
|     } | ||||
| 
 | ||||
|     public int getId() { | ||||
|         return id; | ||||
|     } | ||||
| 
 | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,23 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| import org.springframework.web.bind.annotation.PathVariable; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| 
 | ||||
| import com.fasterxml.jackson.annotation.JsonView; | ||||
| 
 | ||||
| @RestController | ||||
| public class UserController { | ||||
| 
 | ||||
|     @JsonView(Views.Public.class) | ||||
|     @RequestMapping("/{id}") | ||||
|     public Item getItemPublic(@PathVariable final int id) { | ||||
|         return ItemManager.getById(id); | ||||
|     } | ||||
| 
 | ||||
|     @JsonView(Views.Internal.class) | ||||
|     @RequestMapping("/internal/{id}") | ||||
|     public Item getItemInternal(@PathVariable final int id) { | ||||
|         return ItemManager.getById(id); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,9 @@ | ||||
| package org.baeldung.jackson.jsonview; | ||||
| 
 | ||||
| public class Views { | ||||
|     public static class Public { | ||||
|     } | ||||
| 
 | ||||
|     public static class Internal extends Public { | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,87 @@ | ||||
| package org.baeldung.jackson.test; | ||||
| 
 | ||||
| import static org.hamcrest.Matchers.containsString; | ||||
| import static org.hamcrest.Matchers.not; | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertThat; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import org.baeldung.jackson.jsonview.Item; | ||||
| import org.baeldung.jackson.jsonview.MyBeanSerializerModifier; | ||||
| import org.baeldung.jackson.jsonview.User; | ||||
| import org.baeldung.jackson.jsonview.Views; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import com.fasterxml.jackson.core.JsonProcessingException; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
| import com.fasterxml.jackson.databind.ser.BeanSerializerFactory; | ||||
| import com.fasterxml.jackson.databind.ser.SerializerFactory; | ||||
| 
 | ||||
| public class JacksonJsonViewTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenUseJsonViewToSerialize_thenCorrect() throws JsonProcessingException { | ||||
|         final User user = new User(1, "John"); | ||||
| 
 | ||||
|         final ObjectMapper mapper = new ObjectMapper(); | ||||
|         final String result = mapper.writerWithView(Views.Public.class).writeValueAsString(user); | ||||
| 
 | ||||
|         assertThat(result, containsString("John")); | ||||
|         assertThat(result, containsString("1")); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenUsePublicView_thenOnlyPublicSerialized() throws JsonProcessingException { | ||||
|         final User owner = new User(1, "John"); | ||||
|         final Item item = new Item(2, "book", owner); | ||||
| 
 | ||||
|         final ObjectMapper mapper = new ObjectMapper(); | ||||
|         final String result = mapper.writerWithView(Views.Public.class).writeValueAsString(item); | ||||
| 
 | ||||
|         assertThat(result, containsString("book")); | ||||
|         assertThat(result, containsString("2")); | ||||
| 
 | ||||
|         assertThat(result, not(containsString("John"))); | ||||
|         assertThat(result, not(containsString("1"))); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenUseInternalView_thenAllSerialized() throws JsonProcessingException { | ||||
|         final User owner = new User(1, "John"); | ||||
|         final Item item = new Item(2, "book", owner); | ||||
| 
 | ||||
|         final ObjectMapper mapper = new ObjectMapper(); | ||||
|         final String result = mapper.writerWithView(Views.Internal.class).writeValueAsString(item); | ||||
| 
 | ||||
|         assertThat(result, containsString("book")); | ||||
|         assertThat(result, containsString("2")); | ||||
| 
 | ||||
|         assertThat(result, containsString("John")); | ||||
|         assertThat(result, containsString("1")); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenUseJsonViewToDeserialize_thenCorrect() throws IOException { | ||||
|         final String json = "{\"id\":1,\"name\":\"John\"}"; | ||||
| 
 | ||||
|         final ObjectMapper mapper = new ObjectMapper(); | ||||
| 
 | ||||
|         final User user = mapper.readerWithView(Views.Public.class).withType(User.class).readValue(json); | ||||
|         assertEquals(1, user.getId()); | ||||
|         assertEquals("John", user.getName()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenUseCustomJsonViewToSerialize_thenCorrect() throws JsonProcessingException { | ||||
|         final User user = new User(1, "John"); | ||||
|         final SerializerFactory serializerFactory = BeanSerializerFactory.instance.withSerializerModifier(new MyBeanSerializerModifier()); | ||||
| 
 | ||||
|         final ObjectMapper mapper = new ObjectMapper(); | ||||
|         mapper.setSerializerFactory(serializerFactory); | ||||
| 
 | ||||
|         final String result = mapper.writerWithView(Views.Public.class).writeValueAsString(user); | ||||
|         assertThat(result, containsString("JOHN")); | ||||
|         assertThat(result, containsString("1")); | ||||
|     } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user