オブジェクトのシリアル化にSpringとGsonを使用しています。
@Expose
アノテーションを使用するモデル オブジェクトがあります。
public class Zone {
@Expose
private String name;
@Expose
private String description;
@Expose
private List<String> longList;
private String someIrrelevantVar;
}
Zone
オブジェクトリストをユーザーに提供する2つのコントローラーがあります。
@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;
}
}