小编Ome*_*ron的帖子

杰克逊反序列化的类型与不同的对象

我有一个Web服务的结果,它返回一个布尔值或一个单例映射,例如

布尔结果:

{
    id: 24428,
    rated: false
}
Run Code Online (Sandbox Code Playgroud)

地图结果:

{
    id: 78,
    rated: {
        value: 10
    }
}
Run Code Online (Sandbox Code Playgroud)

我个人可以轻松地映射这两个,但我如何一般地做到这一点?

基本上我想把它映射到类,如:

public class Rating {
    private int id;
    private int rated;
    ...
    public void setRated(?) {
        // if value == false, set rated = -1;
        // else decode "value" as rated
    }
}
Run Code Online (Sandbox Code Playgroud)

所有多态示例都使用@JsonTypeInfo基于数据中的属性进行映射,但在这种情况下我没有该选项.


编辑
更新的代码部分:

@JsonProperty("rated")
public void setRating(JsonNode ratedNode) {
    JsonNode valueNode = ratedNode.get("value");
    // if the node doesn't exist then it's the boolean value
    if (valueNode …
Run Code Online (Sandbox Code Playgroud)

java jackson deserialization

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

在类之间传递记录器

我的项目中有两个类,我想将记录器从主类传递给子类,并让子类使用父级的记录器设置.

子类是一个单独的泛型类(即不与主类绑定),如果没有提供,则必须能够创建自己的记录器.

主类创建一个记录器,添加一个控制台处理程序,文件处理程序和日志格式化程序,我希望子类能够临时覆盖它的日志消息的日志格式化程序,然后当主类恢复时,恢复为它的日志格式化程序.

我已经尝试将记录器添加到子类中,或者根据需要创建一个新的记录器,但是我在屏幕上和日志文件中得到了多条消息(它似乎将处理程序附加到主类而不是覆盖 - 骑它).

我该怎么做呢?

java logging

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

如何使用gpg签名配置Jenkins(Hudson)

我正在转换到Maven(来自Ant),并希望在Jenkins作业中使用GPG自动签署我的工件.

从我读过的文档中,我需要手动运行Maven来签署文档

$ mvn clean deploy -Dgpg.passphrase=yourpassphrase
Run Code Online (Sandbox Code Playgroud)

如何在不透露密码的情况下执行此操作?

可能吗?

我看到了这个问题,但没有说明如何配置Jenkins Job/Maven POM:在CI环境中为Maven项目保留GPG密钥的位置?

我在运行Jenkins的同一台服务器上生成了GPG密钥.

hudson gnupg maven jenkins

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

使用运行时属性创建扩展的"枚举"

我想简化特定预定义对象的选择.

我目前有一个枚举定义为

ArtworkType { Poster, Banner, Other }
Run Code Online (Sandbox Code Playgroud)

我想为这些ArtworkTypes添加属性,以便我可以在其他地方的代码中使用它们.ArtworkTypes的属性是预定义的静态标签,或者是从填充到Properties()类中的外部配置文件填充的.

理想情况下,我想做一些简单的事情

ArtworkType.Poster.getWidth();
Run Code Online (Sandbox Code Playgroud)

如果我必须使用最后一堂课,我认为使用类似的东西会更复杂

ArtworkType.getWidth(TypeEnum.Poster);
Run Code Online (Sandbox Code Playgroud)


编辑:感谢下面的答案,我得出结论,虽然我可以使用枚举,但最好使用外部类(例如ArtworkUtil)来检索我所追求的属性.

这是我到目前为止创建的示例枚举代码(省略错误检查):

public enum ArtworkType {
    Poster("poster"), Banner("banner"), Other("other");

    private String type;
    private Dimension dimension;

    private ArtworkType(String type) {
        this.type = type;
        this.dimension = new Dimension(Properties.getProperty("width."+type), Properties.getProperty("height."+type);
    }

    public Dimension getDimension() {
        return dimension;
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然我理解这违反了严格的Enums原则,因为与Enum相关的值是静态的(在应用程序的持续时间内)它可能是两个邪恶中的较小者.

我能想到的唯一另一种方法是创建一个"ArtworkUtil"类,它创建一个集合并将所有必需的属性填充到一个对象中并将其存储在集合中.

在代码中访问该类将使其更难以理解(除非我遗漏了什么?)

java enums class

4
推荐指数
1
解决办法
7832
查看次数

标签 统计

java ×3

class ×1

deserialization ×1

enums ×1

gnupg ×1

hudson ×1

jackson ×1

jenkins ×1

logging ×1

maven ×1