Jackson JSON

Dev.Hammy·2024년 4월 3일
0
post-custom-banner

Spring은 Jackson JSON 라이브러리를 지원합니다.

JSON Views

반응형 스택에서 이에 상응하는 내용 보기

Spring MVC는 Object에 있는 모든 필드의 하위 집합만 렌더링할 수 있는 Jackson의 직렬화 뷰에 대한 기본 지원을 제공합니다. @ResponseBody 또는 ResponseEntity 컨트롤러 메서드와 함께 사용하려면 다음 예제와 같이 Jackson의 @JsonView annotation을 사용하여 직렬화 뷰 클래스를 활성화할 수 있습니다.

@RestController
public class UserController {

	@GetMapping("/user")
	@JsonView(User.WithoutPasswordView.class)
	public User getUser() {
		return new User("eric", "7!jd#h23");
	}
}

public class User {

	public interface WithoutPasswordView {};
	public interface WithPasswordView extends WithoutPasswordView {};

	private String username;
	private String password;

	public User() {
	}

	public User(String username, String password) {
		this.username = username;
		this.password = password;
	}

	@JsonView(WithoutPasswordView.class)
	public String getUsername() {
		return this.username;
	}

	@JsonView(WithPasswordView.class)
	public String getPassword() {
		return this.password;
	}
}

[Note]
@JsonView는 다양한 뷰 클래스를 허용하지만 컨트롤러 메서드당 하나만 지정할 수 있습니다. 여러 보기를 활성화해야 하는 경우 복합 인터페이스를 사용할 수 있습니다.

위 작업을 프로그래밍 방식으로 수행하려면 @JsonView annotation을 선언하는 대신 반환 값을 MappingJacksonValue로 래핑하고 이를 사용하여 직렬화 뷰를 제공합니다.

@RestController
public class UserController {

	@GetMapping("/user")
	public MappingJacksonValue getUser() {
		User user = new User("eric", "7!jd#h23");
		MappingJacksonValue value = new MappingJacksonValue(user);
		value.setSerializationView(User.WithoutPasswordView.class);
		return value;
	}
}

뷰 확인에 의존하는 컨트롤러의 경우 다음 예제와 같이 직렬화 뷰 클래스를 모델에 추가할 수 있습니다.

@Controller
public class UserController extends AbstractController {

	@GetMapping("/user")
	public String getUser(Model model) {
		model.addAttribute("user", new User("eric", "7!jd#h23"));
		model.addAttribute(JsonView.class.getName(), User.WithoutPasswordView.class);
		return "userView";
	}
}
post-custom-banner

0개의 댓글