0

オブジェクトのシリアル化に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> longListvar です - 通常、多くのエントリがあります (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;
    }
}
4

1 に答える 1