我正在使用Spring Data REST,我正在尝试使用Spring REST更改多对一关系,但我无法获得正确的http调用.
我的实体看起来像这样(像POST等创建的基本调用工作正常):
{
"id" : 70,
"productId" : yyy,
"productdiscount" : 10,
"version" : 0,
"description" : "xxx",
"_links" : {
"self" : {
"href" : "http://localhost:8080/rest/rules/70"
},
"timedefinition" : {
"href" : "http://localhost:8080/rest/rules/70/timedefinition"
}
}
}
我想将ID为1的当前时间定义更改为ID 2.
我尝试了很多不同的错误调用类型.以下电话无效.
curl -X PUT -H "Content-Type: text/uri-list" -d 'http://localhost:8080/rest/timedefinition/1' http://localhost:8080/rest/rules/70/timedefinition
收到以下错误:
无法从类型java.lang.String转换为类型domain.TimeDefinition值为'0'; 嵌套异常是java.lang.IllegalArgumentException:为类domain.TimeDefinition提供了错误类型的id.预期:类java.lang.Integer,得到类java.lang.Long
另一个例子是:
curl -X PUT -H "Content-Type: application/json" -d '{"timedefinition": {"href" : "http://localhost:8080/rest/timedefinition/0", "rel" : "timedefinition"} }' http://localhost:8080/rest/rules/70/timedefinition
我得到的错误是:
"message":"必须只发送一个链接来更新不是List或Map的属性引用."
http://docs.spring.io/spring-data/rest/docs/2.0.1.RELEASE/reference/html/上的主要参考资料不能很好地提供有关上述主题的大量信息.
有关正确的REST查询格式以更新实体关联的任何见解和解释都非常感谢!
如果我在服务器模式下运行neo4j以便可以使用REST API访问它,我可以使用EmbeddedGraphDatabase-class访问相同的neo4j实例吗?
我正在考虑一个生产设置,其中使用EmbeddedGraphDatabase的Java应用程序正在驱动逻辑,但其他客户端可能使用REST以只读模式导航数据.
我使用嵌入式Jetty来启动webapp,我使用JSP页面作为视图.
使用maven-jetty-plugin可以很好地进行测试,这让我觉得我在引导服务器时缺少一些依赖项(这是问题的根本原因).
我用命令引导Jetty:
java $JAVA_OPTS -cp target/classes:target/dependency/* xxx.Main
Run Code Online (Sandbox Code Playgroud)
我已经在Maven中使用了依赖插件,以确保获得类路径上的所有deps(在打包的war文件之外):
<execution>
<id>copy-dep</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
Run Code Online (Sandbox Code Playgroud)
Main类看起来像这样:
Server server = new Server(8080);
WebAppContext root = new WebAppContext();
root.setContextPath("/");
root.setWar("target/app.war");
server.setHandler(root);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)
嵌入式Jetty服务器启动时没有错误,但是当导航到返回JSP页面的URL时,我总是会收到此错误.
堆栈跟踪:
PWC6181: File /javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd not found
Caused by:
org.xml.sax.SAXException: PWC6181: File /javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd not found
at org.apache.jasper.xmlparser.MyEntityResolver.resolveEntity(ParserUtils.java:566)
at com.sun.org.apache.xerces.internal.util.EntityResolverWrapper.resolveEntity(EntityResolverWrapper.java:107)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.resolveEntityAsPerStax(XMLEntityManager.java:1018)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1192)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:296)
at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:366)
at org.apache.jasper.runtime.TldScanner.scanTld(TldScanner.java:526) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用JSR-303验证在spring中为带注释的bean添加单元测试.
这个bean很简单:
public class Bean {
@Size(max=XX)
String text;
}
Run Code Online (Sandbox Code Playgroud)
在Spring配置中,我有所有必需的JAR文件:
validation-api
hibernate-validator
Run Code Online (Sandbox Code Playgroud)
验证器初始化为:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
Run Code Online (Sandbox Code Playgroud)
我在测试用例中的尝试看起来像这样(弹簧和其他绒毛被移除):
@Autowired
private LocalValidatorFactoryBean factory;
@Test
public void testTemplateFormBeanValidation() {
// TODO exception at the moment. Can not resolve the validator. Provider issue.
factory.setProviderClass(HibernateValidator.class);
factory.setTraversableResolver(new DefaultTraversableResolver());
Validator val = factory.getValidator();
TemplateFormBean fb1 = new TemplateFormBean();
fb1.setText("this text works");
Set<ConstraintViolation<TemplateFormBean>> constraints = val.validate(fb1);
assertNull(constraints);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此测试时,我得到以下堆栈跟踪:
java.lang.AbstractMethodError: javax/persistence/spi/PersistenceProvider.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
at javax.persistence.Persistence$1.isLoaded(Persistence.java:78)
at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:62)
at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:94)
at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)
at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:757)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:324)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:273)
at …Run Code Online (Sandbox Code Playgroud)