小编Tob*_*ias的帖子

为什么枚举有一个包私有构造函数?

由于枚举构造函数只能由其常量调用,为什么它允许是包私有的?

java enums package-private

55
推荐指数
2
解决办法
1万
查看次数

使用JacksonJson动态忽略属性

我知道有多种方法可以告诉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 json jackson

8
推荐指数
1
解决办法
7917
查看次数

Springs的@RequestParam注释的内部工作

在Spring中,如果我没有弄错的话,以下两个陈述是相同的:

@RequestParam("type") String type
@RequestParam String type
Run Code Online (Sandbox Code Playgroud)

spring如何知道'type'的变量名(第二版).我的印象是,除非使用-g标志(包括调试信息)进行编译,否则将从类文件中删除此信息.

java spring annotations internal

6
推荐指数
1
解决办法
2454
查看次数

使用Intellij自动导入自定义sbt配置

我无法在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来管理测试.我可以手动将目录标记为源,但每次都会被还原

  1. 我更新我的sbt文件(自动导入).
  2. 通过sbt工具窗口进行手动更新

相关:使用预配置的配置IntegrationTest按预期工作,但自定义一次不工作.

scala intellij-idea sbt intellij-13

6
推荐指数
1
解决办法
488
查看次数

多个Actors写入同一个文件+旋转

我在Scala中编写了一个非常简单的Web服务器(基于Actors).这样做的目的是从我们的前端服务器记录事件(例如,如果用户单击按钮或页面加载).该文件需要每64-100mb左右旋转一次,然后发送到s3以便以后使用Hadoop进行分析.流量约为50-100个/ s

一些问题突然出现在我脑海中:

  1. 如何确保所有actor都能以线程安全的方式写入一个文件?
  2. 在X量为mb之后旋转文件的最佳方法是什么.我应该在我的代码中还是从文件系统中执行此操作(如果我从文件系统执行此操作,那么如何验证文件不在写入过程中或刷新缓冲区)

webserver scala thread-safety

2
推荐指数
1
解决办法
958
查看次数