小编ecb*_*die的帖子

杰克逊:使用嵌套对象对对象进行JSON序列化,将子字段合并到拥有类中

假设我的Java类看起来像这样:

public class A {
    public String name;
    public B b;
}

public class B {
    public int foo;
    public String bar;
}
Run Code Online (Sandbox Code Playgroud)

我想将一个实例序列A化为JSON.我将使用杰克逊ObjectMapper班级:

A a = new A(...);
String json = new ObjectMapper().writeValueAsString(a);
Run Code Online (Sandbox Code Playgroud)

使用此代码,我的JSON将如下所示:

{
    "name": "MyExample",
    "b": {
        "foo": 1,
        "bar": "something"
    }
}
Run Code Online (Sandbox Code Playgroud)

相反,我想注释我的Java类,以便生成的JSON看起来像这样:

{
    "name", "MyExample",
    "foo": 1,
    "bar": "something"
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java serialization json jackson

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

在Java GAE后端Servlet中使用Guice Injection

我有一个两难选择在我的GAE的Java应用程序:我想写将由GAE后端处理一个servlet 它也必须用Guice的依赖注入启动所有servlet的领域.我尝试了多种方法,但似乎没有人为我做这个伎俩.

我首先尝试在servlet中使用Sitebricks,但似乎这样做会导致GAE在查询后端URL时无法将类检测为合法的servlet:始终从后端返回404 Not Found.尽管如此,我确信该类使用Sitebricks注释正确注释,因为相同的URI路径与前端实例一起工作正常.

接下来,我尝试使用Guice Servlet Extension(参见此链接); 在我创建全局的类中Injector,我使用了这个绑定:

return Guice.createInjector(..., new ServletModule() {
    @Override
    protected void configureServlets() {
        serve("/backend/*").with(MyBackend.class);
    }
}, ...);
Run Code Online (Sandbox Code Playgroud)

不幸的是,与Sitebricks发生的问题完全相同:我在后端返回404错误,但在前端没有.

最后一种可行的方法是配置servlet-mapping web.xml; 传统的方法.这最终允许我的后端检测URI映射(随后是Google的Java GAE后端文档中写的内容:"后端与主应用程序版本共享web.xml中定义的servlet.").不幸的是,我无法利用Guice注射器使用这个程序,因此我非常不希望使用它web.xml.

我甚至尝试结合第二种和第三种方法:同时使用Guice Servlet Extension和web.xml.这个错误从后端返回500错误,并出现此错误:

java.lang.InstantiationException: com.example.MyBackend
    at java.lang.Class.newInstance0(Class.java:340)
    at java.lang.Class.newInstance(Class.java:308)
    at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.BackendServersFilter.doRedirectedServerRequest(BackendServersFilter.java:292)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:106)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at …
Run Code Online (Sandbox Code Playgroud)

google-app-engine servlets guice guice-servlet sitebricks

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

升级到3.1.1后,Maven-plugin-plugin default-descriptor错误消息

我正在将我的系统的Maven运行时从3.0.5升级到3.1.1并尝试使用mvn clean install我通常的方式来构建我的项目.使用较旧的Maven运行时,构建将始终成功.但是,我现在总是在构建期间收到此错误消息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project XYZ: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 48188 -> [Help 1]

我想也许是因为我的依赖项和插件已经过时,所以我跑去mvn versions:use-latest-versions更新我的pom.xml版本.这仍然没有解决这个问题.有任何想法吗?


UPDATE

根据大众需求,这是我的pom.xml文件的样子.请注意,mvn versions:use-latest-versions除了Sitebricks和qdox之外,所有依赖项和插件版本都已更新,因为我不希望将更改集成到我的项目中.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.my.company</groupId>
    <artifactId>my-own-project</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <name>My Cool Maven Plugin</name>
    <packaging>maven-plugin</packaging>
    <distributionManagement>
    <repository>
            <id>someID</id>
            <url>http://some.url.com</url>
    </repository>
    </distributionManagement>   
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <dependencies>
        <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.20</version>
    </dependency>
        <dependency> …
Run Code Online (Sandbox Code Playgroud)

java plugins dependencies maven

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

xsd:simpleType:xsd:pattern和xsd:maxLength能一起工作吗?

假设我正在处理一个xsd:simpleType,它是一个字符串,需要具有特定的字符集和特定的最大长度,类似于下面的代码:

<xsd:simpleType name="MyType">
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="[0-9]" />
    <xsd:maxLength value="36" />
    </xsd:restriction>
</xsd:simpleType>  
Run Code Online (Sandbox Code Playgroud)

所以我的xsd类型将是一个只有数字的字符串,最多36个字符.我的问题是xsd:pattern和xsd:maxLength(或任何其他类似的标签,如minLength)是否可以一起工作.我的直觉不是; 基于模式或基于长度的xsd元素仅在xsd:restriction中.因此,我必须将最大长度限制添加到模式中.

请注意,我通过在Java上解组xml并验证失败来测试它.无论如何,我正在寻找的信息是两个如何以及模式和maxLength可以一起工作的信息.

regex xsd simpletype unmarshalling xsd-validation

5
推荐指数
1
解决办法
4002
查看次数

Maven:xpp3与xpp3_min

在我的Java Maven项目中,我的两个代码直接依赖项使用XPP3的子依赖项.但是,其中一个具有工件ID xpp3,而另一个具有工件ID xpp3_min.两者都是1.1.4c版本.有谁知道这两者之间的区别?我的项目允许两者都是依赖关系,而不会因冲突而将其中任何一个标记为已排除.

XPP3项目的主页:http://www.extreme.indiana.edu/xgws/xsoap/xpp/

Maven存储库参考:http://mvnrepository.com/artifact/xpp3/xpp3_minhttp://mvnrepository.com/artifact/xpp3/xpp3.请注意两个项目如何具有相同的描述.我不只是想天真地假设它_min是一个最小版本,因为它的名称后缀.

dependencies maven

5
推荐指数
1
解决办法
1458
查看次数

ElasticSearch在文档插入时运行脚本(插入API)

是否可以指定在使用Index API将文档插入ElasticSearch时执行的脚本?通过在HTTP请求正文中传入属性,使用其Update API使用新信息更新现有文档时,会存在此功能.我认为它在Index API中也很有用,因为在插入过程中可能会有一些用户想要自动计算和填充的字段,而不必在插入后发送额外的Update请求以执行脚本.script

elasticsearch

5
推荐指数
1
解决办法
3262
查看次数

Rails 5 升级:routes.rb 文件被清除

我正在将 Rails 应用程序从 4.2.x 升级到 5.0.x。在我更新了所有与 Rails 相关的 gem 之后Gemfile,我运行了rails更新所有文件以符合最新版本的任务,按照升级指南

rails app:update
Run Code Online (Sandbox Code Playgroud)

这个命令中有很多冲突,所以我按下a接受所有冲突,然后在提交之前手动检查它们。我主要关心的是config/routes.rb文件发生了什么。基本上,文件的全部内容,除了Rails.application.routes.draw块和添加到文件末尾的关于 DSL 的单个注释,都被保留了下来。多年来添加到应用程序的所有路线都被清除,在任何其他文件中都找不到。

这个问题不会阻止我,我会简单地检出文件以将其恢复到以前的状态。然而,让我特别担心的是,在升级 Rails 版本的正常情况下,一个重要文件被清除了。我想看看是否有其他人遇到过这个问题,这是否在意料之中,发生了什么。欢迎 Rails 维护者提出意见。谢谢你。

ruby-on-rails ruby-on-rails-5

5
推荐指数
1
解决办法
967
查看次数

从TypeReference <E>转换为Class <E>而不进行强制转换(Java)

我希望在使用强制转换的情况下从Java中的TypeReference<E>对象转换为Class<E>对象.我需要使用,因为我的代码使用Jackson的方式,我需要对象,因为我想用它来推断我的应用程序中的其他通用类之一的类型.TypeReferenceClass

我知道这TypeReference.getType()会返回一个java.lang.reflect.Type对象.基本上,如果我能找到一个办法用代码,而不从铸造获得TypeClass,后来我想通了我的问题.

Javadoc参考文献:

java generics casting jackson

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

使用Google的Maven GAE插件上传OAuth2无密码GAE

我知道Google使用appcfg.{sh,cmd]支持无密码GAE应用上传,如下所述:https://developers.google.com/appengine/docs/java/tools/uploadinganapp#Passwordless_Login_with_OAuth2

但是,我想知道我是否可以使用Google的官方Maven GAE插件来做同样的事情.有一个目标appengine:update,用于将本地GAE应用程序上传到云端.但是,我无法在任何地方找到有关这是否支持OAuth2的信息.任何人都知道我如何结合OAuth2和这个Maven插件?

原因是因为我使用Jenkins来构建我的项目,而我更愿意在构建期间使用Maven目标自动上传我的应用程序而不是运行脚本(比Maven目标更复杂)作为构建后步骤.

google-app-engine maven maven-gae-plugin oauth-2.0

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

Guice Generic Provider(Provider本身是通用的,而不是它绑定的类)

有一个关于如何使用吉斯提供商绑定到一个通用类,如很多网络资源的维基条目这样这样的SOF的问题.但是,我无法找到有关如何使用通用本身的提供程序的资源.

例如,假设我有以下内容:

public interface Foo {
    ...
}

public class Bar implements Foo {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Bar有一个注入参数,必须在构造函数中.在我的情况下,我们无法将此参数移动到字段或方法注入.

所以,现在我想为Foo编写一个Provider,但它返回一个Bar实例.像这样的东西:

@Singleton
public class FooProvider<T extends Foo> extends Provider<Foo> {
    @Inject
    public FooProvider(Object someParameterWeMustInjectIntoConstructor) {
        ...
    }
    ...
    @Override
    public Foo get() {
        return new Bar(...);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

注意这个类是如何依赖于Guice注入本身的单例,因此必须使用配置Provider .toProvider(FooProvider.class).我们也只能使用构造函数注入而不是方法和字段注入,可能是因为具有此Provider的类型层次结构.

我试图找到某种使用方式.toProvider(FooProvider<Bar>.class),但我们都知道这不是有效的Java语法.有谁知道我如何.toProvider(Class<? extends Provider>)在模块中使用Guice绑定器的方法,所以我可以使用通用的Provider来创建一个具体的实现类?如果我的问题有点令人困惑,请告诉我.

java inheritance dependency-injection guice constructor-injection

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