我知道有多种方法可以告诉JacksonJson在渲染过程中忽略属性但是所有这些都是静态的.(JasonIgnore,MixIn类,..).
这是我的情景.域对象可以实现名为FilteredDomain的接口,以允许动态过滤它.界面很简单,只暴露一个方法"getIgnoreProperties".(要忽略的属性列表).
然后我注册一个绑定到FilteredDomain对象的自定义序列化程序.代码看起来像:
private class FilteredDomainSerializer extends JsonSerializer<FilteredDomain> {
public void serialize(FilteredDomain arg, JsonGenerator jgen,
SerializerProvider provder) throws IOException,
JsonProcessingException {
final BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(arg);
for (PropertyDescriptor pd : wrapper.getPropertyDescriptors()) {
final String name = pd.getName();
if (arg.getIgnoreProperties().containsKey(name))
continue;
final Object value = wrapper.getPropertyValue(name);
jgen.writeObjectField(name, value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先,我真的不喜欢我需要使用Spring Bean包装器来获取所有属性的列表并遍历它们(必须有一种方法可以做到这一点是jackson json).
其次,代码仍然不起作用.我收到错误:
org.codehaus.jackson.JsonGenerationException:无法在org.codehaus.jackson.impl.Utf8Generator.writeFieldName中写入org.codehaus.jackson.impl.JsonGeneratorBase._reportError(JsonGeneratorBase.java:480)中的字段名称. Utf8Generator.java:270)org.codehaus.jackson.JsonGenerator.writeObjectField(JsonGenerator.java:1088)at com.rootmusic.util.SystemJsonObjectMapper $ ValueObjectSerializer.serialize(SystemJsonObjectMapper.java:65)at com.rootmusic.util.SystemJsonObjectMapper位于org.codehaus.jackson.map.ser.ContainerSerializers的$ ValueObjectSerializer.serialize(SystemJsonObjectMapper.java:1)org.codehaus.jackson.map.ser.ContainerSerializers $ IndexedListSerializer.serializeContents $ IndexedListSerializer.serializeContents(ContainerSerializers.java:309) (ContainerSerializers.java:254)org.codehaus.jackson.map.ser.ContainerSerializers $ AsArraySerializer.serialize(ContainerSerializers.java:142)org.codehaus.jackson.map.ser.MapSerializer.serializeFields(MapSerializer.java:287)org.codehaus.jackson.map.ser.MapSerializer.serialize(MapSerializer.java:212)atg.codehaus.jackson.map.ser.MapSerializer.serialize(MapSerializer.java:23)atg.codehaus.jackson org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:280)中的.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:606)
在Spring中,如果我没有弄错的话,以下两个陈述是相同的:
@RequestParam("type") String type
@RequestParam String type
Run Code Online (Sandbox Code Playgroud)
spring如何知道'type'的变量名(第二版).我的印象是,除非使用-g标志(包括调试信息)进行编译,否则将从类文件中删除此信息.
我无法在Intellij(13.1)中获得嵌入式sbt插件(启用了自动导入)以识别自定义sbt配置.我在我的sbt构建文件中有以下设置:
lazy val EndToEndTest = config("e2e") extend (Test)
private lazy val e2eSettings =
inConfig(EndToEndTest)(Defaults.testSettings)
lazy val root: Project = Project(
id = "root",
base = file(".")
)
.configs(EndToEndTest)
.settings(e2eSettings)
Run Code Online (Sandbox Code Playgroud)
代码根据sbt控制台中的期望工作.例如,我可以写:sbt e2e:test(它将执行位于/ src/e2e/scala中的测试)
问题是目录/ src/e2e/scala不会在Intellij中注册为源目录.这使得很难使用intellij来管理测试.我可以手动将目录标记为源,但每次都会被还原
相关:使用预配置的配置IntegrationTest按预期工作,但自定义一次不工作.
我在Scala中编写了一个非常简单的Web服务器(基于Actors).这样做的目的是从我们的前端服务器记录事件(例如,如果用户单击按钮或页面加载).该文件需要每64-100mb左右旋转一次,然后发送到s3以便以后使用Hadoop进行分析.流量约为50-100个/ s
一些问题突然出现在我脑海中: