我也在为此要求而苦苦挣扎。
以下代码是使用@beerbajay在对问题的评论中已经提到的JsonViews的变通方法:
http://wiki.fasterxml.com/JacksonJsonViews
我正在使用Spring Boot 1.2.3。
Views.java
package demo;public class Views { static interface Public {} static interface Internal extends Public {}}相册.java
package demo;import com.fasterxml.jackson.annotation.JsonView;public class Album { @JsonView(Views.Public.class) private String id; @JsonView(Views.Public.class) private String title; @JsonView(Views.Public.class) private String artist; @JsonView(Views.Internal.class) private String secret; public Album(String id, String title, String artist, String secret) { this.id = id; this.title = title; this.artist = artist; this.secret = secret; }}AlbumController.java
package demo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.ObjectWriter;@RestControllerpublic class AlbumController { @Autowired ObjectMapper mapper; @RequestMapping(value = "/album", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public String getAlbum() throws JsonProcessingException { Album foo = new Album("1", "foo", "John Doe", "secretProperty"); // replace the following value with runtime logic of your choice, // e.g. role of a user boolean forInternal = false; ObjectWriter viewWriter; if (forInternal) { viewWriter = mapper.writerWithView(Views.Internal.class); } else { viewWriter = mapper.writerWithView(Views.Public.class); } return viewWriter.writevalueAsString(foo); }}因此,关键是使用杰克逊的ObjectMapper和ObjectWriter生成对象的json表示形式的
字符串 。
对我来说有点丑陋,但是有效。当然,问题仍然在于定义多个时如何缩放
RequestMapping。



