您的位置:首页 > 编程语言 > Java开发

Spring MVC @JsonView实现在消息转换器中过滤数据

2016-01-19 13:48 555 查看

0x01问题描述

最近做的项目,很多地方是为手机端编写的接口。领导要求只返回必要的数据,所以就要进行过滤。要求要灵活配置,编写简单。

0x02 思路

-第一种思路就是,在service中返回数据后,用代码将不必要的数据设置为NULL。 sucks~!不考虑。

-然后找到了json-lib包中的组件进行过滤,这种方式也需要写不少代码。而且没有跟spring mvc的消息转换器结合,所以这种实现方式虽然可以达到效果,但是不够优雅。

-最后很自然的就想到了Spring MVC当中@ResponseBody注解所引用的消息转换器jackson。于是在spring官网上就找到了这一篇。Latest Jackson integration improvements in Spring

0x03用法

用法很简单如下:

public class View {
interface Summary {}
}

public class User {

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

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

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

private String email;
private String address;
private String postalCode;
private String city;
private String country;
}

public class Message {

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

@JsonView(View.Summary.class)
private LocalDate created;

@JsonView(View.Summary.class)
private String title;

@JsonView(View.Summary.class)
private User author;

private List<User> recipients;

private String body;
}


创建一个View类,里面含有一个接口。(注解里用,注意如果需要在其他包中使用interface得是public的)

在实体当中就可以使用@JsonView注解来标注这个字段在哪种类型的View当中被转换了。

在Controller当中,就能用刚才的注解来标注,你想要哪种类型的过滤后的结果了。

@RestController
public class MessageController {

@Autowired
private MessageService messageService;

@JsonView(View.Summary.class)
@RequestMapping("/")
public List<Message> getAllMessages() {
return messageService.getAll();
}

@RequestMapping("/{id}")
public Message getMessage(@PathVariable Long id) {
return messageService.get(id);
}
}


具体内容参见代码和链接吧,刚开始写博客。感觉自己都不知道怎么说话了。

注意,spring 4.x以后才支持这个功能。并且在dispacherServlet的配置当中一定要加上 这个东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc Jackson