假设我的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)
有任何想法吗?
我有一个两难选择在我的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) 我正在将我的系统的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版本.这仍然没有解决这个问题.有任何想法吗?
根据大众需求,这是我的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) 假设我正在处理一个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可以一起工作的信息.
在我的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_min和http://mvnrepository.com/artifact/xpp3/xpp3.请注意两个项目如何具有相同的描述.我不只是想天真地假设它_min
是一个最小版本,因为它的名称后缀.
是否可以指定在使用Index API将文档插入ElasticSearch时执行的脚本?通过在HTTP请求正文中传入属性,使用其Update API使用新信息更新现有文档时,会存在此功能.我认为它在Index API中也很有用,因为在插入过程中可能会有一些用户想要自动计算和填充的字段,而不必在插入后发送额外的Update请求以执行脚本.script
我正在将 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 维护者提出意见。谢谢你。
我希望在不使用强制转换的情况下从Java中的TypeReference<E>
对象转换为Class<E>
对象.我需要使用,因为我的代码使用Jackson的方式,我需要对象,因为我想用它来推断我的应用程序中的其他通用类之一的类型.TypeReference
Class
我知道这TypeReference.getType()
会返回一个java.lang.reflect.Type对象.基本上,如果我能找到一个办法用代码,而不从铸造获得Type
到Class
,后来我想通了我的问题.
Javadoc参考文献:
我知道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目标更复杂)作为构建后步骤.
有一个关于如何使用吉斯提供商绑定到一个通用类,如很多网络资源的维基条目这样和这样的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
java ×4
maven ×3
dependencies ×2
guice ×2
jackson ×2
casting ×1
generics ×1
inheritance ×1
json ×1
oauth-2.0 ×1
plugins ×1
regex ×1
servlets ×1
simpletype ×1
sitebricks ×1
xsd ×1