我也在为此要求而苦苦挣扎。
我正在使用Spring Boot 1.2.3。
Views.javaalbum.javapackage demo;public class Views { static interface Public {} static interface Internal extends Public {}}
AlbumController.javapackage 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; }}
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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)