Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 工厂:相同类型的字段,但Json中的字符串格式不同_Java_Json_Moshi - Fatal编程技术网

Java 工厂:相同类型的字段,但Json中的字符串格式不同

Java 工厂:相同类型的字段,但Json中的字符串格式不同,java,json,moshi,Java,Json,Moshi,我已经暴露了我的问题 Resume:如何使用自定义注释将json反序列化为具有两个相同类型但不同json格式的字段的类 在杰克·沃顿的暗示下,我成功地获得了想要的结果。 我在这里分享它,给任何寻求解决方案的人 是否有更好的方法在工厂的create方法中查找注释?或者用这种方法实现我的目标的更好的方法 这里是(简化的)代码,没有适配器类,这是最简单的部分 Json的示例Java类 DateFormat注释 基于LocalDate的DateFormat注释的JsonAdapter.Factory 公

我已经暴露了我的问题

Resume:如何使用自定义注释将json反序列化为具有两个相同类型但不同json格式的字段的类

在杰克·沃顿的暗示下,我成功地获得了想要的结果。 我在这里分享它,给任何寻求解决方案的人

是否有更好的方法在工厂的create方法中查找注释?或者用这种方法实现我的目标的更好的方法

这里是(简化的)代码,没有适配器类,这是最简单的部分

Json的示例Java类 DateFormat注释 基于LocalDate的DateFormat注释的JsonAdapter.Factory
公共类DateFormatFactory实现JsonAdapter.Factory
{
@凌驾

public@Nullable JsonAdapter create(Type Type_p,Setseems好的。你可以做
Types.getRawType(Type_p)!=LocalDate.class
,顺便说一句。是的,你是对的,我的方法很笨拙……谢谢!
public class Data
{
    @DateFormat("yyyy-MM-dd")
    LocalDate date1;
    @DateFormat("ddMMyyyy")
    LocalDate date2;
}
@Retention(RetentionPolicy.RUNTIME)
@JsonQualifier
@interface DateFormat
{
    String value();
}
public class DateFormatFactory implements JsonAdapter.Factory
{
    @Override
    public @Nullable JsonAdapter<?> create(Type type_p, Set<? extends Annotation> annotations_p, Moshi moshi_p)
    {
        if (annotations_p.isEmpty() || !type_p.getTypeName().equals(LocalDate.class.getName()))
        {
            return null;
        }
        for (Annotation annotation : annotations_p)
        {
            if (annotation instanceof DateFormat)
            {
                return new LocalDateAdapter(((DateFormat) annotation).value());
            }
        }
        return null;
    }
}