【发布时间】:2017-08-08 12:35:14
【问题描述】:
我正在使用带有 Gson 的 Spring 进行对象序列化。
我有使用 @Expose 注释的模型对象,例如:
public class Zone {
@Expose
private String name;
@Expose
private String description;
@Expose
private List<String> longList;
private String someIrrelevantVar;
}
我有 2 个控制器,它们为用户提供 Zone 对象列表,例如:
@RestController
class ZoneController {
@GetMapping(value = "fullData")
List<Zone> getFullZones() {
return zoneService.getZones();
}
}
@RestController
class SimpleZoneController {
@GetMapping(value = "simpleData")
List<Zone> getSimpleZones() {
return zoneService.getZones();
}
}
问题是List<String> longList var - 它通常有很多条目(String 只是示例,在代码中它可能是复杂对象)。
在我的getFullZones() 中,我想使用这个longList 为用户区域提供服务,但在getSimpleZones() 中,我想为没有longList 的区域提供服务(它不会以任何方式在客户端使用)。
怎么做?
我可以使用区域迭代列表并将 longList 设置为 null,但这不是非常优雅的解决方案。
我正在设置 Spring 以像这样使用 Gson:
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(createGsonHttpMessageConverter());
super.configureMessageConverters(converters);
}
private GsonHttpMessageConverter createGsonHttpMessageConverter() {
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
//.registerTypeAdapter - register some deserializers
.create();
GsonHttpMessageConverter gsonConverter = new GsonHttpMessageConverter();
gsonConverter.setGson(gson);
return gsonConverter;
}
}
【问题讨论】:
标签: java spring serialization gson spring-json