我的对象有id, name, description
属性。
在某些情况下,我想返回整个对象但在某些情况下我只想返回id
,假设当我插入新记录时,它应该只返回新生成的id。
public class DTO {
private Integer id;
private String name;
private String description;
// getter-setter
}
控制器:
@RequestMapping(value = "/{cname}/met", method = RequestMethod.POST)
@ResponseBody
public DTO addMet(@PathVariable String cname, @RequestBody DTO met) {
return service.addMet(met); // service return whole DTO object that is newly added with new Id
}
我想仅返回id
作为回复,那么有关如何做的任何帮助或指导?
谢谢。
答案 0 :(得分:0)
除非我遗漏了某些内容,否则您可以更改方法的返回类型并返回id
类似
public Integer addMet(@PathVariable String cname, @RequestBody DTO met) {
return service.addMet(met).getId();
}
记录完整回报可能是个好主意(假设您已覆盖toString()
)
public Integer addMet(@PathVariable String cname, @RequestBody DTO met) {
LOG.debug("Adding: %s", met);
DTO r = service.addMet(met);
LOG.debug("Result: %s", r);
return r.getId();
}
至于你的自定义类,你可以写一个像
这样的内部类static class Identity {
public Identity(int id) {
this.id = id;
}
private final int id;
public int getId() {
return id;
}
public String toString() {
return String.format("id: %d", id);
}
}
并返回
public Identity addMet(@PathVariable String cname, @RequestBody DTO met) {
LOG.debug("Adding: %s", met);
DTO r = service.addMet(met);
LOG.debug("Result: %s", r);
return new Identity(r.getId());
}
答案 1 :(得分:0)
您是否尝试过JsonIgnore注释? http://jackson.codehaus.org/1.0.1/javadoc/org/codehaus/jackson/annotate/JsonIgnore.html
答案 2 :(得分:0)
在您的控制器中,将要排除的字段设置为null
。
还要将Spring的基础Jackson ObjectMapper
实例配置为不序列化null
字段:
@Configuration
public class ServiceContext
extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = this.getConverter();
converters.add(converter);
}
@Bean
public MappingJackson2HttpMessageConverter getConverter() {
MappingJackson2HttpMessageConverter converter =
new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = this.getObjectMapper();
converter.setObjectMapper(mapper);
return converter;
}
@Bean
public ObjectMapper getObjectMapper() {
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
mapper.setSerializationInclusion(Include.NON_NULL); // don't serialize nulls
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
return factory;
}
}
答案 3 :(得分:0)
您需要使用@JsonView
JSON视图
过滤上下文序列化的对象有时会很有用 到HTTP响应主体。为了提供这样的能力, Spring MVC现在已经内置了对Jackson的序列化视图的支持。