我收到以下错误 - 我在我的依赖项中添加了GSon -
有人可以指出我做错了吗?
编辑:指定依赖项 -
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.7.1</version>
</dependency>
我在我的sevlet中使用以下代码 -
JSONService json = new JSONService();
String json_output = json.makeLoginJSON(user);
makeLoginJSON ---
public String makeLoginJSON(LoginDetails user) {
String FinalJson = null;
Gson gson = new Gson();
FinalJson = gson.toJson(user);
return FinalJson;
}
答案 0 :(得分:16)
尝试:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
我已编辑了我的评论并添加了范围。默认范围是 compile ,这意味着在运行时不存在依赖关系。为此,您使用提供的范围。有关Apache Introduction to Maven Dependencies的maven依赖关系中的范围的更多信息。
希望这可以解决您的问题。
P.S。:如果您要创建自己的存储库,还应该查看here。
答案 1 :(得分:3)
只是澄清一下劳尔的答案 - 很好,它适用于你,但提供是针对预期可从JRE / JDK获得的依赖关系,即servlet类。编译是默认的,并且应该在其他人的情况下工作,因为gson不能从JRE获得,而是需要由maven下载。来自http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope:
<强>编译强> 这是默认范围,如果未指定,则使用此范围。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项将传播到依赖项目。
<强>提供强> 这很像compile,但表示您希望JDK或容器在运行时提供依赖性。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径中可用,并且不可传递。
<强>运行时强> 此范围表示编译不需要依赖项,但是用于执行。它位于运行时和测试类路径中,但不是编译类路径。
<强>测试强> 此范围表示正常使用应用程序不需要依赖关系,并且仅适用于测试编译和执行阶段。
<强>系统强> 此范围与提供的类似,只是您必须提供明确包含它的JAR。工件始终可用,不会在存储库中查找。
导入(仅适用于Maven 2.0.9或更高版本) 此范围仅用于节中pom类型的依赖项。它表示应该用该POM部分中的依赖项替换指定的POM。由于它们被替换,具有导入范围的依赖性实际上并不参与限制依赖的传递性。
答案 2 :(得分:0)
添加以下导入:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
答案 3 :(得分:-1)
尝试:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.21</version>
</dependency>
速度快,使用简单。
VO obj = ...;
String jsonString = JSON.toJSONString(obj);
VO obj2 = JSON.parseObject(jsonString, VO.class);