1

次のようなJavaクラスがあります。

class TestJsonClass {
    private String propertyA;
    private String propertyB;
    private String propertyC;
}

実行時に、 @JsonProperty("sample") を使用して静的なものではなく、各プロパティに異なるプロパティ名を付けたい

どうすればこれを達成できますか? 私はJacksonライブラリとSpring MVCを使用しています

前もって感謝します...

4

2 に答える 2

2

逆シリアル化で使用される ObjectMapper にカスタム PropertyNamingStrategy を挿入できます。

実行時にフィールドを PropertyNamingStrategy に設定するだけで、それらをデフォルトの JsonPropertyName のようなもの (たとえば、propertyA、propertyB、propertyC) にマップできると仮定します。

public class MyNamingStrategy extends PropertyNamingStrategy {

    String propertyAName, propertyBName, propertyCName;

    public MyNamingStrategy(String propANm, String propBNm, String propCNm) {
        this.propertyAName = propANm;
        //finish
    }

    @Override
    public String nameForField(MapperConfig<?> config, AnnotatedField field,
            String defaultName) {
        return convert(defaultName);
    }

    @Override
    public String nameForGetterMethod(MapperConfig<?> config,
            AnnotatedMethod method, String defaultName) {
        return convert(defaultName);
    }

    @Override
    public String nameForSetterMethod(MapperConfig<?> config,
            AnnotatedMethod method, String defaultName) {
        return convert(defaultName);
    }

    public String convert(String defaultName ){
        return defaultName.replace("propertyA", propertyAName).replace( //finish
    }

最後に、インスタンスを作成し、実行時に注入します。objectMapper.setNamingStrategy(myNamingStrategyInstance));

PropertyNamingStrategy の詳細については、この Cowtowncoder の投稿を参照してください。

Jackson 1.8: カスタム プロパティの命名戦略

またはこのドキュメント:

github.com/FasterXML/jackson-docs/wiki/PropertyNamingStrategy

于 2015-08-22T19:00:45.093 に答える