是否可以根据rest调用配置item类来显示和隐藏特定字段?比如我想躲起来 colorId
(并展示) categoryId
)从 User
调用时的类 XmlController
反之亦然 JsonController
.
项目类别
@Getter
@Setter
@NoArgsConstructor
public class Item
{
private Long id;
private Long categoryId; // <-- Show field in XML REST call and hide in JSON REST call
private Long colorId; // <-- Show field in JSON REST call and hide in XML REST call
private Long groupId;
@JacksonXmlProperty(localName = "item")
@JacksonXmlElementWrapper(localName = "groupItems")
private List<GroupedItem> item;
}
json控制器
@RestController
@RequestMapping(
path = "/json/",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class JsonController
{
@Autowired
private Service service;
@RequestMapping(path = "{colorId}")
public Item getArticles(@PathVariable("colorId") Long colorId)
{
return service.getByColor(colorId); // returns JSON without "categoryId"
}
}
xml控制器
@RestController
@RequestMapping(
path = "/xml/",
produces = MediaType.APPLICATION_XML_VALUE)
public class XmlController
{
@Autowired
private Service service;
@RequestMapping(path = "{categoryId}")
public Item getArticles(@PathVariable("categoryId") Long categoryId)
{
return service.getByCategory(categoryId); // returns XML without "colorId"
}
}
2条答案
按热度按时间wljmcqd81#
是的,这可以通过jackson json视图和方法实现
ObjectMapper#writerWithView
.您只需要配置
ObjectMapper
两个控制器都不一样,很好jacksonjson视图的一个例子如下,我们注意到
ownerName
只能在内部访问,不能公开访问sdnqo3pr2#
我通过创建以下视图解决了这个问题:
通过此配置,可以将类设置为:
(注:如果您想列出
List<GroupedItem> item
在你的回答中你需要定义@JsonView(View.Parent.class)
在GroupedItem
以及)最后,如果您使用的是spring,那么rest请求(参见问题)可以定义为: