Spring MVC @JsonView注解使用

对jsonview很久也没有理解怎么使用,今天看到一篇文章解释的很清楚
,现总结如下:

@JsonView注解用来过滤序列化对象的字段属性,简单来说就是定义一个标签,根据controller的JsonView属性,将实体类中不同标签的属性进行分类显示。

例:
首先定义一个view类,有两个接口Summary 和SummaryWithDetail :

public class View {
   public interface Summary {}
   public interface SummaryWithDetail extends Summary{}
}

然后定义一个实体类User,选择属性分别加上注解@JsonView(View.Summary.class) 或@JsonView(View.SummaryWithDetail .class)

public class User { 

  @JsonView(View.Summary.class) 
  private Long id; 
  @JsonView(View.Summary.class) 
  private String firstname; 
  @JsonView(View.Summary.class) 
  private String lastname; 

  @JsonView(View.SummaryWithDetail .class) 
  private String email; 
  @JsonView(View.SummaryWithDetail .class) 
  private String address; 

  private String postalCode; 
  private String city; 
  private String country;

  ...
}

定义Controller类,加上@JsonView注解:

@RestController
public class UserRestController{
  @Autowired 
  private UserService userService;

  @RequestMapping("/user")
  @JsonView(View.Summary.class) 
  public List<User> getUsers(){
    return userService.listUsers();
  }

  @RequestMapping("/userWithDetail")
  @JsonView(View.SummaryWithDetail.class) 
  public List<User> getUsersWithDetail(){
    return userService.listUsers();
  }
}

访问/user时,使用的注解是@JsonView(View.Summary.class),所以仅显示注解为@JsonView(View.Summary.class)的属性,结果为:

[
{ “id” : 1, “firstname” : “Brian”, “lastname” : “Clozel” },
{ “id” : 2, “firstname” : “Stéphane”, “lastname” : “Nicoll” },
{ “id” : 3, “firstname” : “Rossen”, “lastname” : “Stoyanchev” }
]

访问/userWithDetail时,使用的注解是@JsonView(View.SummaryWithDetail.class),结果显示注解为@JsonView(View.SummaryWithDetail.class)的属性,同时由于SummaryWithDetail继承于Summary,结果也包含注解为@JsonView(View.Summary.class)的属性,结果为:

[
{
“id” : 1,
“firstname” : “Brian”,
“lastname” : “Clozel”,
“email”: “brian@163.com”,
“address”: “beijing China”
},
{
“id” : 2,
“firstname” : “Stéphane”,
“lastname” : “Nicoll”,
“email”: “nicoll@163.com”,
“address”: “beijing China”
},
{
“id” : 3,
“firstname” : “Rossen”,
“lastname” : “Stoyanchev” ,
“email”: “stoyanchev@163.com”,
“address”: “beijing China”
}
]

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring MVC的ModelAndView是一个组合对象,它将Model(数据)和View(视图)合并在一起。ModelAndView包含一个Model实例(一个Map对象),其中包含需要在视图中呈现的数据,以及一个视图名称或视图对象。Spring MVC将ModelAndView返回给DispatcherServlet,然后DispatcherServlet使用视图解析器(ViewResolver)将视图名称解析为实际的视图对象,最终将数据和视图传递给客户端。 使用Spring MVC构建Restful风格的API,首先需要定义API的URI和HTTP方法。在Spring MVC中,可以使用@RequestMapping注解来定义API的URI和HTTP方法。例如: ```java @RestController @RequestMapping("/api") public class MyRestController { @GetMapping("/user/{id}") public User getUserById(@PathVariable("id") Long id) { User user = userService.getUserById(id); return user; } @PostMapping("/user") public User createUser(@RequestBody User user) { userService.createUser(user); return user; } @PutMapping("/user/{id}") public User updateUser(@PathVariable("id") Long id, @RequestBody User user) { userService.updateUser(id, user); return user; } @DeleteMapping("/user/{id}") public void deleteUser(@PathVariable("id") Long id) { userService.deleteUser(id); } } ``` 上面的代码定义了一个名为MyRestController的RestController,它包含四个API方法:getUserById、createUser、updateUser和deleteUser。这些方法分别使用@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解来指定API的HTTP方法。其中,@PathVariable注解用于获取URI中的参数,@RequestBody注解用于获取请求体中的数据。 在API方法中,可以直接返回数据对象,Spring MVC会自动将其转换为JSON格式的响应。如果需要自定义响应格式或响应状态码,可以使用ResponseEntity类。例如: ```java @GetMapping("/user/{id}") public ResponseEntity<User> getUserById(@PathVariable("id") Long id) { User user = userService.getUserById(id); if (user != null) { return ResponseEntity.ok(user); } else { return ResponseEntity.notFound().build(); } } ``` 上面的代码定义了一个返回类型为ResponseEntity<User>的API方法,它可以自定义响应状态码和响应体。如果找到了用户,则返回200状态码和用户对象;如果找不到用户,则返回404状态码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值