跳到主要内容
版本:7.0.3

Jackson JSON

Hunyuan 7b 中英对照 Jackson JSON

Spring支持Jackson JSON库。

JSON 视图

Spring MVC内置了对Jackson的序列化视图的支持,这些视图允许仅渲染Object中的一部分字段。要与@ResponseBodyResponseEntity控制器方法一起使用它,可以使用Jackson的@JsonView注解来激活一个序列化视图类,如下例所示:

@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;
}
}
备注

@JsonView 允许指定多个视图类数组,但每个控制器方法只能指定一个。如果需要激活多个视图,可以使用一个复合接口。

如果你想通过编程方式来实现上述功能,可以不使用@JsonView注解,而是将返回值用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";
}
}