Spring MVC 将所有模型 类 作为 json 字符串发送

Spring MVC send all model classes as json string

我是 Spring MVC 和 JSON 的菜鸟。我有一个 class 层次结构(接口,classes,subclasses),我想将其发送到我的视图,然后在视图中恢复对象(可能是一些 Json 库,当前使用 FlexJson).

这背后的想法是我试图根据我的配置层次结构中的 classes 生成一个工具箱,允许用户通过拖放(使用 jQuery? ) 项目(来自配置层次结构的类型),为这些项目中的每一个设置各种属性(特性),并最终保存并发送回配置以进行持久化。

到目前为止...我只知道使用 Reflections Library 从包中获取(对象的)(子)类型,如下所示:

Reflections reflections = new Reflections( new ConfigurationBuilder()
            .setUrls( ClasspathHelper.forPackage( "com.obsm.myapp.model.configuration" ) )
            .setScanners( new SubTypesScanner(false) )
            .filterInputsBy( new FilterBuilder().includePackage( "com.obsm.myapp.model.configuration" ) ) );
    Set<Class<?>> types = reflections.getSubTypesOf( Object.class );

非常感谢任何帮助。

经过大量谷歌搜索、尝试和失败后,我决定采用以下修复方法。我有一个 Util class,如果我将 Class 传递给它,它会得到一个 json 字符串。我现在正在使用 Jackson Library 来获得 json 表示。

public class Util {

public static String toJsonString( Class<?> entity )
{
    ObjectMapper mapper = new ObjectMapper();
    String json = "";
    try {
        String toolItemMode = "";
        List<Class<?>> interfaceList = Arrays.asList( entity.getInterfaces() );
        if ( interfaceList.contains( IConnectableObject.class ) )
        {
            toolItemMode = "both";
        }
        else if ( interfaceList.contains( IConnectionSource.class ) )
        {
            toolItemMode = "source";
        }
        else if ( interfaceList.contains( IConnectionSink.class ) )
        {
            toolItemMode = "sink";
        }

        json = mapper.writeValueAsString( entity.newInstance() );
        ObjectNode objectNode = ( ObjectNode ) mapper.readTree( json );
        objectNode.put( "mode", toolItemMode );
        json = objectNode.toString();
    } catch ( IOException e ) {
        e.printStackTrace();
    } catch ( InstantiationException e ) {
        e.printStackTrace();
    } catch ( IllegalAccessException e ) {
        e.printStackTrace();
    }
    return json;
}
}

然后在控制器方法中我这样做...

.....
Reflections reflections = new Reflections( "com.obsm.myapp.model.configuration" );
    Set<Class<? extends IConfigurationEntity>> classes = reflections.getSubTypesOf( IConfigurationEntity.class );
    Map<String, String> toolBox = new HashMap<String, String>();
    for ( Class<? extends IConfigurationEntity> configItem : classes )
    {
        toolBox.put( configItem.getSimpleName(), Util.toJsonString( configItem ) );
    }
model.addAttribute( "toolBox", toolBox );
.....

如果有人有更好的想法,我相信你们中的很多人都有,我很想了解他们。希望这对某人有帮助。 :-)