我使用Jackson(2.1.1)进行JSON序列化/反序列化.我有一个带有JAXB注释的现有类.大多数这些注释都是正确的,可以和杰克逊一样使用.我正在使用mix-ins来稍微改变这些类的反序列化/序列化.
在我的ObjectMapper构造函数中,我执行以下操作:
setAnnotationIntrospector(AnnotationIntrospector.pair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector(getTypeFactory())));
Run Code Online (Sandbox Code Playgroud)
基于以上所述,杰克逊注释优先于Jaxb,因为内省人的顺序.这是基于杰克逊Jaxb 文档.对于我想要忽略@JsonIgnore
的字段,添加到混合中的字段工作正常.有几个字段标记为@XmlTransient
现有类中我不想忽略的字段.我已经尝试@JsonProperty
在混合中添加到该字段,但它似乎不起作用.
这是原始课程:
public class Foo {
@XmlTransient public String getBar() {...}
public String getBaz() {...}
}
Run Code Online (Sandbox Code Playgroud)
这是混合:
public interface FooMixIn {
@JsonIgnore String getBaz(); //ignore the baz property
@JsonProperty String getBar(); //override @XmlTransient with @JsonProperty
}
Run Code Online (Sandbox Code Playgroud)
知道如何在不修改原始类的情况下解决这个问题吗?
我还测试了将@JsonProperty添加到成员而不是使用mix-ins:
public class Foo {
@JsonProperty @XmlTransient public String getBar() {...}
@JsonIgnore public String getBaz() {...}
}
Run Code Online (Sandbox Code Playgroud)
我似乎得到了与混合输入相同的行为.除非删除@XmlTransient,否则将忽略该属性.
我们正在使用Maven 2并拥有一个使用SSL客户端身份验证保护的maven存储库管理器.为了让Maven访问存储库,必须将以下系统属性传递给Java:
javax.net.ssl.trustStore = trust.jks
javax.net.ssl.trustStorePassword = <trustPass>
javax.net.ssl.keyStore = keystore.p12
javax.net.ssl.keyStoreType = pkcs12
javax.net.ssl.keyStorePassword =<keyStorePass>
有关详细信息,请参阅此迷你指南.
为了在Maven中设置这些系统属性,我必须使用MAVEN_OPTS环境变量(或直接在命令行上传递它们).无论哪种方式,当Maven实际执行时,所有这些属性都可以被系统上的其他用户看到(通过ps),包括我的密钥库密码.
有没有办法设置这些属性,以便密码不会在命令行上公开?
有没有办法在github上向前和向后导航提交历史记录?
我想要一些类似于Trac的东西,如果我点击修订日志中的特定变更集,则会有下一个更改和上一个更改的链接.
我有一个带有自定义身份验证器的Android库项目和一个为验证者提供登录屏幕的Activity.验证器直接包含在我的主应用程序中工作正常,但我想将验证器放入一个单独的Android库.当我运行引用此库的主要Android应用程序项目时,我在Activity的onCreate方法中使用R.layout调用setContentView时得到'java.lang.NoClassDefFoundError:com.acme.R $ layout'.
我正在使用android gradle构建.我已将这些库发布到本地maven存储库,主项目似乎正在构建而没有任何问题.我已经在build/outputs/apk的debug apk中反编译了class.dex文件,我可以看到库中的R $ layout.class文件存在,所以我完全不知道可能是什么问题.
以下是实现自定义身份验证器的服务:
public class AcmeAuthenticatorService extends Service {
public static final String ACME_ACCOUNT_TYPE = "acme-oauth";
public static final String ACME_ACCESS_TOKEN_TYPE = "acme-oauth-access-token";
private static Authenticator authenticator;
private Authenticator getAuthenticator() {
if (authenticator == null)
authenticator = new Authenticator(this);
return authenticator;
}
@Override
public IBinder onBind(Intent intent) {
if (intent.getAction().equals(AccountManager.ACTION_AUTHENTICATOR_INTENT))
return getAuthenticator().getIBinder();
return null;
}
private static class Authenticator extends AbstractAccountAuthenticator {
private final Context context;
Authenticator(Context ctx) {
super(ctx);
this.context = ctx;
} …
Run Code Online (Sandbox Code Playgroud)