commit
						32584a2238
					
				| @ -9,6 +9,33 @@ | |||||||
| 
 | 
 | ||||||
| 	<dependencies> | 	<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 --> | 		<!-- utils --> | ||||||
| 
 | 
 | ||||||
| 		<dependency> | 		<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