2015-12-13 29 views
1

我对Wildfly和Java EE的某些部分相当陌生。Wildfly和Jackson @JsonIgnore注释

我有一个休息服务使用RestEasy在wildfly上运行。我的'用户'实体有一个'AccessToken'实体。理想情况下,我希望能够将用户实体作为JSON发送,而不必发送访问令牌。

我做了一些研究,发现我应该可以使用@JsonIgnore来完成这个。然而,这个注释是不可用的 - 可能是我的POM中的一个错误。

如果我理解正确,Wildfly会使用Jackson,因此注释应该“提供”。我用了一个“bom”,我认为是所有提供的部分,但我错过了什么?

这里是我的pom.xml它源于快速入门通过的IntelliJ:

<?xml version="1.0" encoding="UTF-8"?> 
JBoss, Home of Professional Open Source 
Copyright 2013, Red Hat, Inc. and/or its affiliates, and individual 
contributors by the @authors tag. See the copyright.txt in the 
distribution for a full listing of individual contributors. 

Licensed under the Apache License, Version 2.0 (the "License"); 
you may not use this file except in compliance with the License. 
You may obtain a copy of the License at 
http://www.apache.org/licenses/LICENSE-2.0 
Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and 
limitations under the License. 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.example</groupId> 
<artifactId>myproject</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>war</packaging> 
<name>WildFly Quickstarts: example</name> 
<description>A starter Java EE 7 webapp project for use on JBoss WildFly/WildFly, generated from the jboss-javaee6-webapp archetype</description> 


<properties> 
    <!-- Explicitly declaring the source encoding eliminates the following 
     message: --> 
    <!-- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered 
     resources, i.e. build is platform dependent! --> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

    <!-- JBoss dependency versions --> 
    <version.wildfly.maven.plugin>1.0.2.Final</version.wildfly.maven.plugin> 

    <!-- Define the version of the JBoss BOMs we want to import to specify 
     tested stacks. --> 
    <version.jboss.bom>8.0.0.Final</version.jboss.bom> 

    <!-- other plugin versions --> 
    <version.compiler.plugin>3.1</version.compiler.plugin> 
    <version.surefire.plugin>2.16</version.surefire.plugin> 
    <version.war.plugin>2.5</version.war.plugin> 

    <!-- maven-compiler-plugin --> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    <maven.compiler.source>1.8</maven.compiler.source> 
</properties> 


<dependencyManagement> 
    <dependencies> 
     <!-- JBoss distributes a complete set of Java EE 7 APIs including a Bill 
      of Materials (BOM). A BOM specifies the versions of a "stack" (or a collection) 
      of artifacts. We use this here so that we always get the correct versions 
      of artifacts. Here we use the jboss-javaee-7.0-with-tools stack (you can 
      read this as the JBoss stack of the Java EE 7 APIs, with some extras tools 
      for your project, such as Arquillian for testing) and the jboss-javaee-7.0-with-hibernate 
      stack you can read this as the JBoss stack of the Java EE 7 APIs, with extras 
      from the Hibernate family of projects) --> 
     <dependency> 
      <groupId>org.wildfly.bom</groupId> 
      <artifactId>jboss-javaee-7.0-with-tools</artifactId> 
      <version>${version.jboss.bom}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.wildfly.bom</groupId> 
      <artifactId>jboss-javaee-7.0-with-hibernate</artifactId> 
      <version>${version.jboss.bom}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 

    <!-- First declare the APIs we depend on and need for compilation. All 
     of them are provided by JBoss WildFly --> 

    <!-- Import the CDI API, we use provided scope as the API is included in 
     JBoss WildFly --> 
    <dependency> 
     <groupId>javax.enterprise</groupId> 
     <artifactId>cdi-api</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Import the Common Annotations API (JSR-250), we use provided scope 
     as the API is included in JBoss WildFly --> 
    <dependency> 
     <groupId>org.jboss.spec.javax.annotation</groupId> 
     <artifactId>jboss-annotations-api_1.2_spec</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Import the JAX-RS API, we use provided scope as the API is included 
     in JBoss WildFly --> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>jaxrs-api</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Import the JPA API, we use provided scope as the API is included in 
     JBoss WildFly --> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Import the EJB API, we use provided scope as the API is included in 
     JBoss WildFly --> 
    <dependency> 
     <groupId>org.jboss.spec.javax.ejb</groupId> 
     <artifactId>jboss-ejb-api_3.2_spec</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.5</version> 
    </dependency> 


    <!-- JSR-303 (Bean Validation) Implementation --> 
    <!-- Provides portable constraints such as @Email --> 
    <!-- Hibernate Validator is shipped in JBoss WildFly --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <scope>provided</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <!-- Import the JSF API, we use provided scope as the API is included in 
     JBoss WildFly --> 
    <dependency> 
     <groupId>org.jboss.spec.javax.faces</groupId> 
     <artifactId>jboss-jsf-api_2.2_spec</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Now we declare any tools needed --> 

    <!-- Annotation processor to generate the JPA 2.0 metamodel classes for 
     typesafe criteria queries --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-jpamodelgen</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Annotation processor that raising compilation errors whenever constraint 
     annotations are incorrectly used. --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator-annotation-processor</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Needed for running tests (you may also use TestNG) --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <!-- Optional, but highly recommended --> 
    <!-- Arquillian allows you to test enterprise code such as EJBs and Transactional(JTA) 
     JPA from JUnit/TestNG --> 
    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.protocol</groupId> 
     <artifactId>arquillian-protocol-servlet</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <!-- Facebook library --> 
    <dependency> 
     <groupId>com.restfb</groupId> 
     <artifactId>restfb</artifactId> 
     <version>1.17.0</version> 
    </dependency> 


</dependencies> 

<build> 
    <!-- Maven will append the version to the finalName (which is the name 
     given to the generated war, and hence the context root) --> 
    <finalName>${project.artifactId}</finalName> 
    <plugins> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>${version.war.plugin}</version> 
      <configuration> 
       <!-- Java EE 7 doesn't require web.xml, Maven needs to catch up! --> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
     <!-- The WildFly plugin deploys your war to a local WildFly container --> 
     <!-- To use, run: mvn package wildfly:deploy --> 

    </plugins> 
</build> 

<profiles> 
    <profile> 
     <!-- The default profile skips all tests, though you can tune it to run 
      just unit tests based on a custom pattern --> 
     <!-- Seperate profiles are provided for running all tests, including Arquillian 
      tests that execute in the specified container --> 
     <id>default</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>${version.surefire.plugin}</version> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

</profiles> 

我也尝试添加:

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.6.4</version> 
    </dependency> 

这让我使用@JsonIgnore但随后仍然在返回给客户端的JSON中显示这个字段。我想也许我的wild is正在使用老版本的jackson(1.x)而不是2? (这给我的印象:JsonIgnoreProperties not working

回答

2

注释@JsonIgnore是杰克逊注释jar的一部分。 要包含它,请在您的pom文件中使用以下依赖项。

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>2.6.4</version> 
</dependency> 
+0

谢谢 - 但添加后,虽然我可以在我的实体字段上使用@JsonIgnore,它仍然显示时返回它。为了确保它不会干涉,我也从我的pom.xml中删除了Gson并使用它。 – ThePerson

+0

啊,...所以在升级到Wildfly 9之后,这种方法可行。我猜想,因为它使用的是新版本。现在我想我需要更新我使用的“bom”,它会很好地运行。谢谢。 如果你可以添加到你的答案,这与蜻蜓9一起工作,但蜻蜓8似乎使用旧的杰克逊版本,这不适用于它可能会帮助其他人。 谢谢! – ThePerson

相关问题