Java 返回时从对象中排除某些字段
我有一个对象,它具有属性Java 返回时从对象中排除某些字段,java,spring,return,Java,Spring,Return,我有一个对象,它具有属性id、name、description 在某些情况下,我想返回整个对象,但在某些情况下,我只想返回id,假设在插入新记录时,它应该只返回新生成的id public class DTO { private Integer id; private String name; private String description; // getter-setter } 控制器: @RequestMapping(value = "/{cname}/
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
作为响应,那么有什么帮助或指导吗
谢谢。除非我遗漏了什么,否则您可以更改方法的返回类型,并返回
id
,如下所示
public Integer addMet(@PathVariable String cname, @RequestBody DTO met) {
return service.addMet(met).getId();
}
记录完整返回可能是一个好主意(假设您已经重写了toString()
)
对于自定义类,您可以编写一个内部类,如
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());
}
您是否尝试过JsonIgnore注释 在控制器中,将要排除的字段设置为
null
还要将Spring的底层JacksonObjectMapper
实例配置为不序列化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;
}
}
@配置
公共类ServiceContext
扩展WebMvcConfigurationSupport{
@凌驾
public void configureMessageConverters(列表您需要使用@JsonView
JSON视图
有时,过滤序列化的上下文对象很有用
HTTP响应主体。为了提供此类功能,
SpringMVC现在内置了对Jackson序列化视图的支持
我不理解它。方法addMet
不能返回Integer
而不是DTO
?@MarceloKeiti:我想以Json
的形式返回响应,就像{id:'1}
,如果我将它作为整数返回,它只会给我id
作为响应。好的,那么返回一个字符串并使用一些框架(如Gson)格式化DTO实例。我想将响应作为Json
返回,如{id:'1'}
,如果我将它作为整数返回,它只会给我id
作为响应。是的,我已经知道这一点。但在某些情况下,我想返回整个对象,而在某些情况下,我只想返回id。所以它应该是一种动态的。也许这会有所帮助,博客甚至指出,有一个很好的例子,我在我出生的时候就使用过它学习
@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;
}
}