我正在尝试使用带有spring-data-mongodb的自定义转换器.我想以编程方式创建它,但我收到以下错误:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type org.joda.time.LocalDate to type java.lang.String
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:475)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:175)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:154)
....
....
Run Code Online (Sandbox Code Playgroud)
以下是失败的代码段:
Mongo mongo = new Mongo();
MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongo, "database");
List<Converter> converters = new ArrayList<>();
converters.add(new LocalDateWriteConverter());
converters.add(new LocalDateReadConverter());
CustomConversions customConversions = new CustomConversions(converters);
MappingContext mappingContext = new SimpleMongoMappingContext();
MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(mongoDbFactory, mappingContext);
mappingMongoConverter.setCustomConversions(customConversions);
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, mappingMongoConverter);
MongoDbEvent mongoEvent = new MongoDbEvent(new LocalDate(2012, 12, 8));
mongoTemplate.insert(mongoEvent);
Run Code Online (Sandbox Code Playgroud)
这是我的转换器类:
class LocalDateReadConverter implements Converter<String, …Run Code Online (Sandbox Code Playgroud) 我在VPC中设置了EKS群集.工作节点在私有子网中启动.我可以成功部署pod和服务.
但是,我无法从pod中执行DNS解析.(它在容器外部的工作节点上工作正常.)
使用https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/进行故障排除会导致nslookup出现以下情况(大约一分钟后超时):
服务器:172.20.0.10地址1:172.20.0.10
nslookup:无法解析'kubernetes.default'
当我在一个全公开的VPC中启动集群时,我没有这个问题.我是否缺少私有子网内DNS解析的必要步骤?
非常感谢,丹尼尔
我试图让Gradle(2.1)和IntelliJ(14.0.2)发挥得很好.具体来说,我已经导入了一个示例Gradle项目,该项目包含用于集成测试的单独源集到IntelliJ中.
使用Gradle在命令行上构建项目,我能够成功运行集成测试.另一方面,当在IntelliJ内部运行时,我有两个问题:
1)由于集成测试中依赖于无法解析的第三方库(commons-collections),因此IntelliJ内部编译失败.
2)如果我删除上面的依赖项并编译,我无法在IntelliJ中运行集成测试.我收到以下错误消息:
没有找到给定的测试包括:[org.gradle.PersonIntegrationTest.canConstructAPersonWithAName]
文件结构如下所示:
src
integration-test
java
resources
main
java
resources
test
java
resources
build.gradle
Run Code Online (Sandbox Code Playgroud)
和build.gradle:
apply plugin: 'java'
repositories {
mavenCentral()
}
sourceSets {
integrationTest {
java.srcDir file('src/integration-test/java')
resources.srcDir file('src/integration-test/resources')
}
}
dependencies {
testCompile 'junit:junit:4.11'
integrationTestCompile 'commons-collections:commons-collections:3.2'
integrationTestCompile sourceSets.main.output
integrationTestCompile configurations.testCompile
integrationTestCompile sourceSets.test.output
integrationTestRuntime configurations.testRuntime
}
task integrationTest(type: Test, dependsOn: jar) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
systemProperties['jar.path'] = jar.archivePath
}
check.dependsOn integrationTest
Run Code Online (Sandbox Code Playgroud)
任何关于如何使这项工作的想法将非常感激.
Gradle分发中提供了完整的Gradle示例项目,位于samples/java/withIntegrationTests下
我想POST(在Java中)一个multipart/mixed请求,其中一个部分是'application/json'类型,另一个是'application/pdf'类型.有谁知道一个图书馆,这将允许我轻松地这样做?令人惊讶的是我找不到一个.
我将生成JSON,但我需要能够将该部分的内容类型设置为'application/json'.
非常感谢,丹尼尔
我在我的REST控制器中使用了spring-data-common的PagedResourcesAssembler,我很高兴看到它甚至在响应中生成了下一个/上一个链接.但是,在我有其他查询参数(除了页面,大小,排序)的情况下,这些参数不包含在生成的链接中.我能以某种方式配置汇编程序以包含链接中的参数吗?
非常感谢,丹尼尔
使用MongoTemplate我试图存储一个名为Person的实体.由于我想使用乐观锁定,因此使用@Version注释对实体进行版本控制.
当我尝试使用MongoTemplate.save将新的Person实体存储到空集合中时,我得到了OptimisticLockingException.我没想到这一点,因为我正在创建一个新对象而不是更新现有对象.(没有其他线程正在访问该集合.)
这是预期的行为,还是我做错了什么?
(如果我使用MongoOperations.insert,一切正常.(我想使用save,因为CrudRepository只有保存,而不是更新.)如果我删除@Version注释,它也可以.)
谢谢,丹尼尔
我的实体类:
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Version;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class Person {
@Version
private long versionId;
@Id
private ObjectId id;
private final String name;
public Person(String name) {
this.name = name;
}
public long getVersionId() {
return versionId;
}
public ObjectId getId() {
return id;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) …Run Code Online (Sandbox Code Playgroud) 我是 Kotlin 的新手,正在试验 spring-data-mongodb。请参阅下面的示例(此处也可作为具有内存中 MongoDb 的完全可运行的 Maven 项目获得:https : //github.com/danielsindahl/spring-boot-kotlin-example)。
应用程序.kt
package dsitest
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
open class Application
fun main(args: Array<String>) {
SpringApplication.run(Application::class.java, *args)
}
Run Code Online (Sandbox Code Playgroud)
用户.kt
package dsitest
import org.springframework.data.annotation.Id
import org.springframework.data.annotation.PersistenceConstructor
import org.springframework.data.mongodb.core.mapping.Document
@Document(collection = "user")
data class User @PersistenceConstructor constructor(@Id val id: String? = null, val userName: String)
Run Code Online (Sandbox Code Playgroud)
用户库.kt
package dsitest
import org.springframework.data.repository.CrudRepository
interface UserRepository : CrudRepository<User, String>
Run Code Online (Sandbox Code Playgroud)
KotlinIntegrationTest.kt
package dsitest
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
@RunWith(SpringRunner::class)
@SpringBootTest …Run Code Online (Sandbox Code Playgroud) java ×2
mongodb ×2
amazon-eks ×1
amazon-vpc ×1
gradle ×1
http ×1
intellij-14 ×1
kotlin ×1
kubernetes ×1