我正在使用带有 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;
}
}