1

嘿,所以基本上我试图让类名出现在我的 JSON 响应中。所以代替这个:

{"username":"MYANCHEK","token":"3b6037c7-e7b3-4e9a-8271-a63adda89371","active":true,"verified":true}

我期待得到这个:

{authenticatedUser: {"username":"MYANCHEK","token":"3b6037c7-e7b3-4e9a-8271-a63adda89371","active":true,"verified":true}}

我已经尝试过@XMLRootElement(name = "authenticatedUser"),以及@JsonRootName(value = "authenticatedUser") 以及@XMLAccessType 的一堆组合

这是我的实际课程:

@XmlRootElement(name = "authenticatedUser")
@JsonRootName(value = "authenticatedUser")
public class AuthenticatedUser implements Principal {

    @JsonIgnore
    private long id;
    private String username;
    private String token;
    private boolean active;

    private boolean verified;

    public AuthenticatedUser(User user, String sessionToken) {
        this.id = user.getUserId();
        this.token = sessionToken;
        this.username = user.getUsername();
        this.active = user.getAccountActive();
        this.verified = user.getVerified();
    }

    public AuthenticatedUser(User user, SessionToken activeSession) {
        this(user, activeSession.getToken());
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getToken() {
        return token;
    }

    @JsonIgnore
    public String getName() {
        return username;
    }

    public boolean isActive() {
        return active;
    }

    public boolean isVerified() {
        return verified;
    }
}

这是我的 web.xml 文件的样子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <display-name>my-services</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/servlet-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter-mapping>
        <filter-name>jersey-servlet</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>jersey-servlet</filter-name>
        <filter-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class>

        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.mywebapp.soa.resource</param-value>
        </init-param>

        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>

        <init-param>
            <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
            <param-value>com.mywebapp.soa.filter.ResourceFilterFactory</param-value>
        </init-param>
    </filter>
</web-app>

这是我的 Maven 依赖项的片段:

<!-- JAX-RS Dependencies -->

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>${jersey.version}</version>
</dependency>

<dependency>
    <groupId>com.sun.jersey.contribs</groupId>
    <artifactId>jersey-spring</artifactId>
    <version>${jersey.version}</version>
    <!-- Exclude Spring  -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-asm</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>${jersey.version}</version>
</dependency>

<!-- Spring Dependencies -->

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>3.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.2.1.RELEASE</version>
    <exclusions>
        <!-- Exclude Commons Logging in favor of SLF4j -->
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

<!-- DB Dependencies -->

<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.2.2</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.24</version>
</dependency>

<!-- JPA Persistence Dependencies -->

<dependency>
    <groupId>org.hibernate.java-persistence</groupId>
    <artifactId>jpa-api</artifactId>
    <version>2.0-cr-1</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>${hibernate.version}</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <version>1.1.1.Final</version>
</dependency>

<!-- Bean Validation Dependencies -->

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>jsr250-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.0.0.GA</version>
    <scope>compile</scope>
</dependency>

<!-- Logging -->

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

<!-- Time Handling -->
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.3</version>
</dependency>

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>2.2</version>
</dependency>

4

2 回答 2

1

我成功获得包装响应的唯一方法是创建一个附加类,该类为要包装的一个或多个对象提供属性。

public class AuthenticationResponse{
   @JsonProperty("authenticated_user")
   private AuthenticatedUser authenticatedUser;

   [add getter and setter]
}

添加 XmlRootName 和 JsonRootName 从来没有为我工作过。

于 2013-10-17T22:17:49.890 回答
0

根据杰克逊文档,我认为您还需要使用 WRAP_ROOT_VALUE 和 @XMLRootElement 。 http://wiki.fasterxml.com/JacksonFeaturesSerialization

于 2013-10-17T03:18:05.590 回答