错误获取方法休息 json
Error get method rest json
我试图制作一个 returns 我的食谱列表的休息应用程序,计数方法有效,但是当我尝试获取其中一个或全部时,它给了我这个错误
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.util.ServiceConfigurationError: javax.json.bind.spi.JsonbProvider: Provider org.eclipse.yasson.JsonBindingProvider not found
我有
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0</version>
</dependency>
在我的 pom.xml
函数看起来像这样
@GET
@Path("/{id : \d+}")
@Produces(APPLICATION_JSON)
public Response getBook(@PathParam("id") @Min(1) int id) {
Recipe recipe = recipeRepository.findOneByID(id);
if (recipe == null)
return Response.status(Response.Status.NOT_FOUND).build();
return Response.ok(recipe).build();
}
这是通过 ID 返回配方的函数
public Recipe findOneByID(int id) {
return entitymanager.find(Recipe.class, id);
}
配方具有以下属性
@Id
private int id;
private String complexity;
private int cookingTime;
private String description;
private int estimatedTime;
private String imageUrl;
private String information;
private boolean isPromoted;
private int preparationTime;
private float servings;
private String title;
private String type;
//bi-directional many-to-one association to Allergen
@OneToMany(mappedBy="recipe")
private List<Allergen> allergens;
//bi-directional many-to-one association to Ingredient
@OneToMany(mappedBy="recipe")
private List<Ingredient> ingredients;
//bi-directional many-to-one association to Mediaitem
@OneToMany(mappedBy="recipe")
private List<Mediaitem> mediaitems;
//bi-directional many-to-one association to Nutritionvalue
@OneToMany(mappedBy="recipe")
private List<Nutritionvalue> nutritionvalues;
//bi-directional many-to-one association to Step
@OneToMany(mappedBy="recipe")
private List<Step> steps;
任何提示都会有很大的帮助。我花了半天时间试图解决这个问题
如果您 运行 在 GlassFish 5.0-b11 或更高级别,那么您需要删除对 Yasson 的依赖(因为 Yasson 已包含在 b11
之后的 GlassFish 5 每晚构建中) ,但是你 应该 指定对 JSON-B 1.0 API (可能 JSON-P 1.1 真的)的依赖,因为没有 Java EE 8 伞式依赖项尚未包含所有 Java EE 8 规范。
删除 Yasson 并添加这些:
<dependency>
<groupId>javax.json.bind</groupId>
<artifactId>javax.json.bind-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
请注意,他们需要 <scope>provided</scope>
,因为 GlassFish 5 提供了实现,而您不希望 Maven 将这些库构建到您的应用程序中。
如果您使用的是 GlassFish 5.0-b10
或更低版本,那么您需要在上面的 pom.xml 中指定这些相同的依赖项以及 Yasson 依赖项,因为 Yasson 是实现并且需要出席:
<dependency>
<groupId>javax.json.bind</groupId>
<artifactId>javax.json.bind-api</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1</version>
<scope>compile</scope>
</dependency>
我还在这里明确添加了 <scope>compile</scope>
,因为如果没有提供范围,这是默认值。明确说明这一点有时很有用,因为您将来可能希望将此项目移至 GlassFish 5,并且需要更改范围并完全删除 Yasson 依赖项。
我试图制作一个 returns 我的食谱列表的休息应用程序,计数方法有效,但是当我尝试获取其中一个或全部时,它给了我这个错误
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.util.ServiceConfigurationError: javax.json.bind.spi.JsonbProvider: Provider org.eclipse.yasson.JsonBindingProvider not found
我有
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0</version>
</dependency>
在我的 pom.xml
函数看起来像这样
@GET
@Path("/{id : \d+}")
@Produces(APPLICATION_JSON)
public Response getBook(@PathParam("id") @Min(1) int id) {
Recipe recipe = recipeRepository.findOneByID(id);
if (recipe == null)
return Response.status(Response.Status.NOT_FOUND).build();
return Response.ok(recipe).build();
}
这是通过 ID 返回配方的函数
public Recipe findOneByID(int id) {
return entitymanager.find(Recipe.class, id);
}
配方具有以下属性
@Id
private int id;
private String complexity;
private int cookingTime;
private String description;
private int estimatedTime;
private String imageUrl;
private String information;
private boolean isPromoted;
private int preparationTime;
private float servings;
private String title;
private String type;
//bi-directional many-to-one association to Allergen
@OneToMany(mappedBy="recipe")
private List<Allergen> allergens;
//bi-directional many-to-one association to Ingredient
@OneToMany(mappedBy="recipe")
private List<Ingredient> ingredients;
//bi-directional many-to-one association to Mediaitem
@OneToMany(mappedBy="recipe")
private List<Mediaitem> mediaitems;
//bi-directional many-to-one association to Nutritionvalue
@OneToMany(mappedBy="recipe")
private List<Nutritionvalue> nutritionvalues;
//bi-directional many-to-one association to Step
@OneToMany(mappedBy="recipe")
private List<Step> steps;
任何提示都会有很大的帮助。我花了半天时间试图解决这个问题
如果您 运行 在 GlassFish 5.0-b11 或更高级别,那么您需要删除对 Yasson 的依赖(因为 Yasson 已包含在 b11
之后的 GlassFish 5 每晚构建中) ,但是你 应该 指定对 JSON-B 1.0 API (可能 JSON-P 1.1 真的)的依赖,因为没有 Java EE 8 伞式依赖项尚未包含所有 Java EE 8 规范。
删除 Yasson 并添加这些:
<dependency>
<groupId>javax.json.bind</groupId>
<artifactId>javax.json.bind-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
请注意,他们需要 <scope>provided</scope>
,因为 GlassFish 5 提供了实现,而您不希望 Maven 将这些库构建到您的应用程序中。
如果您使用的是 GlassFish 5.0-b10
或更低版本,那么您需要在上面的 pom.xml 中指定这些相同的依赖项以及 Yasson 依赖项,因为 Yasson 是实现并且需要出席:
<dependency>
<groupId>javax.json.bind</groupId>
<artifactId>javax.json.bind-api</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1</version>
<scope>compile</scope>
</dependency>
我还在这里明确添加了 <scope>compile</scope>
,因为如果没有提供范围,这是默认值。明确说明这一点有时很有用,因为您将来可能希望将此项目移至 GlassFish 5,并且需要更改范围并完全删除 Yasson 依赖项。