在我尝试使用hibernate ORM和panache测试quarkus的一个小型rest服务之后,我在构建一个本机可执行文件并在docker容器中运行它之后,遇到了一个错误。关键是,它在开发模式下工作得很好,但在构建本机之后就不行了。
我使用的代码是从水果示例中复制并更改为人。我在docker容器中使用postgres db。数据库通过import.sql用一些数据初始化如果我在开发模式下运行它,我可以在http://localhost:8080/person上发出请求,并获得所有人的列表,如果我发出请求,例如在http://localhost:8080/person/2/我得到的人与id 2.在本机构建之后,我在docker容器中运行该服务。有了同样的请求,我得到了所有人的列表,但是如果我想得到例如id 2的人,我得到了一个带有错误的响应代码500:{"错误":"id to load是加载所必需的","code": 500}id为2的人存在于db中。
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.json.Json;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
import io.quarkus.panache.common.Sort;
/**
* PersonResource
*/
@Path("person")
@ApplicationScoped
@Produces("application/json")
@Consumes("application/json")
public class PersonResource {
@GET
public List<Person> get() {
return Person.listAll(Sort.by("lastName"));
}
@GET
@Path("{id}")
public Person getSingle(@PathParam Long id) {
Person entity = Person.findById(id);
if (entity == null) {
throw new WebApplicationException("Person with id of " + id + " does not exist.", 404);
}
return entity;
}
@POST
@Transactional
public Response create(Person person) {
if (person.id != null) {
throw new WebApplicationException("Id was invalidly set on request.", 422);
}
person.persist();
return Response.ok(person).status(201).build();
}
@PUT
@Path("{id}")
@Transactional
public Person update(@PathParam Long id, Person person) {
if (person.firstName == null || person.lastName == null) {
throw new WebApplicationException("First Name or Last Name was not set on request.", 422);
}
Person entity = Person.findById(id);
if (entity == null) {
throw new WebApplicationException("Person with id of " + id + " does not exist.", 404);
}
entity.firstName = person.firstName;
entity.lastName = person.lastName;
return entity;
}
@DELETE
@Path("{id}")
@Transactional
public Response delete(@PathParam Long id) {
Person entity = Person.findById(id);
if (entity == null) {
throw new WebApplicationException("Person with id of " + id + " does not exist.", 404);
}
entity.delete();
return Response.status(204).build();
}
@Provider
public static class ErrorMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception exception) {
int code = 500;
if (exception instanceof WebApplicationException) {
code = ((WebApplicationException) exception).getResponse().getStatus();
}
return Response.status(code)
.entity(Json.createObjectBuilder().add("error", exception.getMessage()).add("code", code).build())
.build();
}
}
}
以下是请求和响应:
$ curl -v -X GET 'http://localhost:8080/person'
Note: Unnecessary use of -X or --request, GET is already inferred.
* Uses proxy env variable no_proxy == 'localhost,127.0.0.1,*sulzer.de'
* Trying ::1:8080...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /person HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.65.3
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/json
< Content-Length: 154
< Date: Tue, 13 Aug 2019 09:15:14 GMT
<
* Connection #0 to host localhost left intact
[{"id":2,"firstName":"Muster","lastName":"Maxmann"},{"id":1,"firstName":"Max","lastName":"Mustermann"},{"id":3,"firstName":"Mann","lastName":"Mustermax"}]
$ curl -v -X GET 'http://localhost:8080/person/2'
Note: Unnecessary use of -X or --request, GET is already inferred.
* Uses proxy env variable no_proxy == 'localhost,127.0.0.1,*sulzer.de'
* Trying ::1:8080...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /person/2 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.65.3
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 500 Internal Server Error
< Connection: keep-alive
< Content-Type: application/json
< Content-Length: 57
< Date: Tue, 13 Aug 2019 09:15:24 GMT
<
* Connection #0 to host localhost left intact
{"error":"id to load is required for loading","code":500}
如RESTEasy文档中所述,如果使用新注释,则需要让编译器生成参数名。将此添加到您的pom。xml
:
<properties>
<maven.compiler.parameters>true</maven.compiler.parameters>
</properties>
您可以尝试使用javax.ws.rs.PathParam
而不是org.jboss.resteasy.annotations.jaxrs.PathParam
吗?
org。jboss。放松点。注释。贾克斯。PathParam
没有被考虑在内,因此您最终将null
传递给您的方法,并且Hibernate ORM with Panache抱怨在您尝试加载实体时没有提供id。
我会看看我们是否可以改善这里的可用性,因为我最近也遇到了同样的问题。
问题内容: 我是tensorflow的新手,今天我使用以下命令安装了tensorflow: 当我尝试导入tensorflow时,它抛出: 我正在使用python 3.5.2 64bit,我真的不知道为什么导入过程会引发错误,请帮我指导 谢谢,最好的问候 问题答案: 只需下载MSVCP140.dll,解压缩,然后将其粘贴到system32文件夹中即可。
问题内容: 我有一个PHP加密功能。我需要一个Java计数器部分。由于我对PHP的了解有限,因此无法理解。有人会两种语言,请帮忙。 PHP代码: 在此先感谢Aniruddha 问题答案: 这应该做。 Java中的MCRYPT_RIJNDAEL_128和MCRYPT_MODE_CBC等效于AES / CBC / NoPadding。您还需要一个用于Base64编码的实用程序,以上代码在Apache
当我想运行反应-本机运行-Android命令我看到 失败:构建失败,有一个异常。 > 哪里出错了:配置根项目'reactNativeCliTest'时出现问题。 无法解析配置“:classpath”的所有依赖项。无法下载gradle core。jar(com.android.tools.build:gradle-core:2.2.3)无法获取资源的https://jcenter.bintray.c
问题内容: 我从我不理解的Java编译器中收到一条错误消息。我已经在OSX 10.6、10.9和Ubuntu 14.04以及Java 6和7上测试了我的代码。当我使用Eclipse调试器或从解释器(使用-Xint选项)运行时,一切运行正常。否则,我将收到以下消息: Java 1.6: Java 1.7: Java 7的错误输出更多(已保存到文件中),但是不幸的是,我无法将其适合本文的字符数限制。有
我有以下简化设置: 4)应用程序.属性 当我使用本机maven配置文件(mvn clean package-pnative)运行该文件时,我得到: 使用--report-unsupport-elements-at-runtime运行它也没有太大帮助。当我删除MyEntity类时,它在Mac+GRAALVM-CE-Java11-20.0.0上成功地编译为本机可执行文件
hibernate文档中说:“如果您希望利用运行时代理生成,那么至少应该使用包可见性来定义构造函数。”。我在hibernate文档中读到,hibernate可以增强字节码而不是代理创建(hibernate 5.x)。在任何情况下,它都可以用这种新方法代替代理创建?在哪些情况下需要生成运行时代理?