JsonPropertyOrder無法為DTO對象進行屬性排序


在項目中,遇到一個問題,無論怎么設置JsonPropertyOrder,都無法正確實現排序功能,問題代碼如下:

@JsonPropertyOrder(value={"courseId","bestGrade","latestGrade","sequences"},alphabetic = true)
public class UserLearningCourseResponseDto implements UserLearningCourseResponse {

    @JsonProperty("courseId")
    private String courseIdentifier;
    @JsonProperty("bestGrade")
    private float bestCourseGrade;
    @JsonProperty("latestGrade")
    private float latestCourseGrade;
    @JsonProperty("sequences")
    private List<UserLearningSequenceResponse> userLearningSequences;
 
     /*--------------------*/
     /*---  Accessors!  ---*/
     /*--------------------*/

    @Override
    public JSONObject asJSONObject() throws JSONException
    {
        return (new JacksonJsonMapper()).toJsonObject(this);
    }

    @Override
    public String getCourseId()
    {
        return courseIdentifier;
    }

    @Override
    public float getBestGrade()
    {
        return bestCourseGrade;
    }

    @Override
    public float getLatestGrade()
    {
        return latestCourseGrade;
    }

    @Override
    public List<UserLearningSequenceResponse> getSequences() {
        return userLearningSequences;
    }

其實上面代碼有問題的原因就在於屬性值和JsonProperty未統一導致的,只需要修改成如下的即可:

package com.rosettastone.ws.ptsws.client.dto.jackson;

import com.google.common.base.Objects;
import com.rosettastone.ws.gearz.domain.jackson.JacksonJsonMapper;
import com.rosettastone.ws.ptsws.dto.UserLearningCourseResponse;
import com.rosettastone.ws.ptsws.dto.UserLearningSequenceResponse;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

import java.util.List;
@JsonPropertyOrder(value={"courseId","bestGrade","latestGrade","sequences"})
public class UserLearningCourseResponseDto implements UserLearningCourseResponse {

    private String type = TYPE_FIELD_VALUE;

    @JsonProperty("courseId")
    private String courseId;
    @JsonProperty("bestGrade")
    private float bestGrade;
    @JsonProperty("latestGrade")
    private float latestGrade;
    @JsonProperty("sequences")
    private List<UserLearningSequenceResponse> sequences;

    /*--------------------*/
    /*---  Accessors!  ---*/
    /*--------------------*/

    @Override
    public JSONObject asJSONObject() throws JSONException
    {
        return (new JacksonJsonMapper()).toJsonObject(this);
    }

    @Override
    public String getCourseId()
    {
        return courseId;
    }

    public void setCourseId(String courseId)
    {
        this.courseId = courseId;
    }

    @Override
    public float getBestGrade()
    {
        return bestGrade;
    }

    public void setBestGrade(float bestGrade)
    {
        this.bestGrade = bestGrade;
    }

    @Override
    public float getLatestGrade()
    {
        return latestGrade;
    }

    public void setLatestGrade(float latestGrade)
    {
        this.latestGrade = latestGrade;
    }

    @Override
    public List<UserLearningSequenceResponse> getSequences() {
        return sequences;
    }

    public void setSequences(List<UserLearningSequenceResponse> sequences) {
        this.sequences = sequences;
    }

    /*-----------------------------------------*/
    /*---  Extend the base class contract!  ---*/
    /*-----------------------------------------*/
    @Override
    public String toString()
    {
        //J-
        return Objects.toStringHelper(this).
                add("courseIdentifier", courseId).
                add("bestGrade", bestGrade).
                add("latestGrade", latestGrade).
                toString();
        //J+
    }
}

希望對你有用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM