diff --git a/jackson-modules/jackson-annotations/pom.xml b/jackson-modules/jackson-annotations/pom.xml index 56fd6cf2fa..4bb9341e43 100644 --- a/jackson-modules/jackson-annotations/pom.xml +++ b/jackson-modules/jackson-annotations/pom.xml @@ -25,6 +25,27 @@ ${rest-assured.version} test + + org.springframework.boot + spring-boot-starter-data-jpa + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-data-jdbc + ${spring-boot.version} + + + com.h2database + h2 + ${h2.version} + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + test + @@ -38,7 +59,9 @@ + 2.1.214 3.1.1 + 2.5.0 \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/Application.java b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/Application.java new file mode 100644 index 0000000000..ad4ef9e9ac --- /dev/null +++ b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/Application.java @@ -0,0 +1,13 @@ +package com.baeldung.jackson.jsonignorevstransient; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/Person.java b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/Person.java new file mode 100644 index 0000000000..982d0e6440 --- /dev/null +++ b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/Person.java @@ -0,0 +1,34 @@ +package com.baeldung.jackson.jsonignorevstransient; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.io.Serializable; + +class Person implements Serializable { + + @JsonIgnore + private final Long id; + + private final String firstName; + + private final String lastName; + + public Person(Long id, String firstName, String lastName) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + } + + public Long getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } + +} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/User.java b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/User.java new file mode 100644 index 0000000000..c12e5225db --- /dev/null +++ b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/User.java @@ -0,0 +1,64 @@ +package com.baeldung.jackson.jsonignorevstransient; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; + +@Entity +@Table(name = "Users") +class User implements Serializable { + + @Id + private Long id; + + private String username; + + private String password; + + @Transient + private String repeatedPassword; + + public User() { + } + + public User(Long id, String username, String password, String repeatedPassword) { + this.id = id; + this.username = username; + this.password = password; + this.repeatedPassword = repeatedPassword; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getRepeatedPassword() { + return repeatedPassword; + } + + public void setRepeatedPassword(String repeatedPassword) { + this.repeatedPassword = repeatedPassword; + } +} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/UserRepository.java b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/UserRepository.java new file mode 100644 index 0000000000..ca6428ca3e --- /dev/null +++ b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/jsonignorevstransient/UserRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.jackson.jsonignorevstransient; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { +} diff --git a/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/jsonignorevstransient/PersonUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/jsonignorevstransient/PersonUnitTest.java new file mode 100644 index 0000000000..0595fc240c --- /dev/null +++ b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/jsonignorevstransient/PersonUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.jackson.jsonignorevstransient; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.not; + +class PersonUnitTest { + + @Test + void givenPerson_whenSerializing_thenIdFieldIgnored() throws JsonProcessingException { + + Person person = new Person(1L, "My First Name", "My Last Name"); + String result = new ObjectMapper().writeValueAsString(person); + + assertThat(result, containsString("firstName")); + assertThat(result, containsString("lastName")); + assertThat(result, not(containsString("id"))); + } +} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/jsonignorevstransient/UserUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/jsonignorevstransient/UserUnitTest.java new file mode 100644 index 0000000000..bc57b6f550 --- /dev/null +++ b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/jsonignorevstransient/UserUnitTest.java @@ -0,0 +1,39 @@ +package com.baeldung.jackson.jsonignorevstransient; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + +@SpringBootTest +class UserUnitTest { + + @Autowired + UserRepository userRepository; + + @Test + void givenUser_whenSave_thenSkipTransientFields() { + User user = new User(1L, "user", "newPassword123", "newPassword123"); + User savedUser = userRepository.save(user); + + assertNotNull(savedUser); + assertNotNull(savedUser.getPassword()); + assertNull(savedUser.getRepeatedPassword()); + } + + @Test + void givenUser_whenSerializing_thenTransientFieldNotIgnored() throws JsonProcessingException { + User user = new User(1L, "user", "newPassword123", "newPassword123"); + String result = new ObjectMapper().writeValueAsString(user); + + assertThat(result, containsString("user")); + assertThat(result, containsString("repeatedPassword")); + } + +} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/resources/application.properties b/jackson-modules/jackson-annotations/src/test/resources/application.properties new file mode 100644 index 0000000000..d0f6dd95ef --- /dev/null +++ b/jackson-modules/jackson-annotations/src/test/resources/application.properties @@ -0,0 +1,5 @@ +hibernate.hbm2ddl.auto=create-drop + +spring.datasource.jdbcUrl=jdbc:h2:mem:testDb;DB_CLOSE_DELAY=-1 +spring.datasource.username=sa +spring.datasource.password=sa \ No newline at end of file