我正在使用spring框架来创建一个休息服务器。我有一个控制器类,可以通过id请求一个itempattern对象或获取所有对象。使用spring,我使用@ResponseBody
和@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE)
将对象序列化为JSON。
我的控制器类:
@RestController
@RequestMapping("/rest/itempatterns")
public class ItempatternController {
/**
* injected resource service interface,
* loads objects from database
*/
private IItempatternResource resource;
/**
* GET one itempattern by the three identifier,
* URL: /rest/itempatterns/:id
*
* @param id
* @return
*/
@RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Itempattern getTirepatternById(@PathVariable("id") int id) {
return resource.getById(id);
}
/**
* GET all itempatterns,
* URL: /rest/itempatterns
*
* @return
*/
@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody List<Itempattern> getAllTirepatterns() {
return resource.getAll();
}
}
从资源我可以收到一个itempattern对象,看起来像这样:
public class Itempattern implements Serializable {
private static final long serialVersionUID = -6168853991825655795L;
@JsonProperty("itemtype")
private Itemtype itemtype;
@JsonProperty("pattern")
private String patternXML;
public Itempattern() {
super();
}
public Itempattern(Itemtype itemtype, String patternXML) {
super();
this.itemtype = itemtype;
this.patternXML = patternXML;
}
//...getter and setter
}
问题是,属性patternXML
是一个非常长的字符串,有时我想加载所有属性的所有itempatterns,有时候序列化时应忽略属性patternXML
(以节省网络资源) )。例如,我想填写一个选择列表,并且不想加载具有patternXML
属性的所有对象(可能稍后在点击时加载它)。
使用@ResponseBody
进行序列化时是否有可能忽略属性在某些情况下是暂时的?
感谢您的帮助!
答案 0 :(得分:1)
您可能正在寻找杰克逊的@JsonView
功能。有了这个,您可以告诉某个请求映射,以生成具有所选属性集的序列化JSON。
示例
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;
}
控制器
@RestController
public class MessageController {
@Autowired
private MessageService messageService;
@JsonView(View.Summary.class)
@RequestMapping("/messageSummaryOnly")
public List<Message> getAllMessages() {
return messageService.getAll();
}
}
对/messageSummaryOnly
的请求将生成序列化列表,其中每个Message
仅填充的字段是使用@JsonView(View.Summary.class)
注释的字段
参考:https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring
答案 1 :(得分:0)
当条件不需要加载patternXML时,在条件下使你的程序中的patternXML值明确地显示为NULL并尝试使用
JSONINCLUDE(INCLUDE.NON_NULL) in your POJO Class
这样该值将为null,并且不会在大小写中加载值。