dbflute / dbflute-core

DBFlute core libraries for Java8
http://dbflute.seasar.org/
23 stars 18 forks source link

DBFlute Runtime: Srl.camelize()/decamelize() front and rear delimiters handling #145

Open jflute opened 2 years ago

jflute commented 2 years ago

for now: no problem?

// #for_now jflute camel conversion for front and rear delimiters, unexpected pattern, cannot decamelize after (2022/05/02)
assertEquals("FooName", camelize("_FOO_NAME_"));
assertEquals("FooName", camelize("_FOO_NAME"));
assertEquals("FooName", camelize("FOO_NAME_"));
// #for_now jflute camel conversion for front and rear delimiters, unexpected pattern, cannot camelize after (2022/05/02)
assertEquals("FOO_NAME_", decamelize("_FooName_"));
assertEquals("FOO_NAME", decamelize("_FooName"));
assertEquals("FOO_NAME_", decamelize("FooName_"));
jflute commented 2 years ago

For example. Gson ignore both side delimiters:

serialize: (fieldName to JSON name)

public void test_demo() {
    FieldNamingPolicy policy = FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES;
    Field field = DfReflectionUtil.getWholeField(Sea.class, "_firstName_");
    log(policy.translateName(field)); // _first_name_ (different result with Srl)
}

public static class Sea {

    public String _firstName_;
}

deserialize: (originally wide scope)

public void test_demo() {
    String json = "{'_first_name_': 'mystic', '_second_name_': 'mystic', '_third_name_': 'mystic'}";
    Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();

    Sea sea = gson.fromJson(json, Sea.class);
    log(sea._firstName_); // mystic
    log(sea._second_name_); // mystic
    log(sea._THIRD_NAME_); // null
}

public static class Sea {

    public String _firstName_;
    public String _second_name_;
    public String _THIRD_NAME_;
}