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 );
.....
如果有人有更好的想法,我相信你们中的很多人都有,我很想了解他们。希望这对某人有帮助。 :-)
我是 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 );
.....
如果有人有更好的想法,我相信你们中的很多人都有,我很想了解他们。希望这对某人有帮助。 :-)