RestController에서 객체 return 시 원하지 않는 값을 json으로 보내지 않게하기

  1. @JsonIgnore

    RestController에서 객체를 return 할 때 해당 객체의 프로퍼티 뿐만이 아니라 get~~()와 같은 getter 형식의 메서드의 결과값도 같이 json으로 응답하게된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Data
public class Person {
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String getInfomation() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
1
2
3
4
5
6
7
8
9
@RestController
public class MyController {

@GetMapping("/person")
public List<Person> personList() {
return Arrays.as(new Person("foo", 10), new Person("bar", 20));
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
// JSON 응답
[
{
"name": "foo",
"age": 10,
"infomation": "Person [name=foo, age=10]"
},
{
"name": "bar",
"age": 20,
"infomation": "Person [name=bar, age=20]"
}
]

이 경우 메서드 위에 @JsonIgnore annotation을 달아주면 해결된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import com.fasterxml.jackson.annotation.JsonIgnore;

@Data
public class Person {
private String name;
private int age;

public Person() {}

public Person(String name, int age) {
this.name = name;
this.age = age;
}

@JsonIgnore
public String getInfomation() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
1
2
3
4
5
6
7
8
9
10
11
// JSON 응답
[
{
"name": "foo",
"age": 10
},
{
"name": "bar",
"age": 20
}
]
  1. @JsonInclude

    RestController에서 객체를 return 할 때 해당 객체의 프로퍼티 중 그 값이 null, 0과 같은 default의 경우 응답으로 보내면 안될 경우가 있다.

이 경우 @JsonInclude를 통해 컨트롤 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Person class
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

@Data
@JsonInclude(Include.NON_DEFAULT)
public class Person {
private String name;
private int age;

public Person() {}

public Person(String name, int age) {
this.name = name;
this.age = age;
}

@JsonIgnore
public String getInfomation() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
1
2
3
4
5
6
7
8
9
10
11
@RestController
public class MyController {

@GetMapping("/person")
public List<Person> persons() {
Person ageUnkown = new Person();
ageUnkown.setName("bar");

return Arrays.asList(new Person("foo", 10), ageUnkown);
}
}
1
2
3
4
5
6
7
8
9
10
// JSON 응답
[
{
"name": "foo",
"age": 10
},
{
"name": "bar"
}
]

NON_DEFAULT 외에도 NON_NULL, NON_EMPTY와 같은 여러 옵션이 있으니 참고하기 바란다.

Share