2016-12-07 3 views
0

Est-il possible de générer une valeur de retour totalAmount d'une entité ShoppingCart qui n'est pas une valeur dans la classe mais une méthode? Ainsi, par exemple, j'ai une classe Shoppingcart avec une liste d'articles. et une méthode totalAmount. Maintenant, quand je fais une demande à l'API avec l'URL http://localhost:8082/carts/1 Je veux obtenir une réponse comme ce qui suit:Comment puis-je générer la valeur de retour d'une méthode comme totalAmount dans une entité de repos de ressort

{ 
"creationDate": "2016-12-07T09:45:38.000+0000", 
    "items": [ 
    { 
     "itemName": "Nintendo 2DS", 
     "description": "Konsole from Nintendo", 
     "price": 300.5, 
     "quantity": 3 
    }, 
    { 
     "itemName": "Nintendo Classic", 
     "description": "Classic nintendo Console from the 80th...", 
     "price": 75, 
     "quantity": 2 
    } 
    ], 
    "totalAmount": "1051,50", 
    "_links": { 
    "self": { 
     "href": "http://localhost:8082/carts/2" 
    }, 
    "cart": { 
     "href": "http://localhost:8082/carts/2" 
    }, 
    "checkout": { 
     "href": "http://localhost:8083/order" 
    } 
    } 
} 

Actuellement, la réponse d'une demande d'API se présente comme suit:

{ 
    "creationDate": "2016-12-07T09:45:38.000+0000", 
    "items": [ 
    { 
     "itemName": "Nintendo 2DS", 
     "description": "Konsole from Nintendo", 
     "price": 300.5, 
     "quantity": 3 
    }, 
    { 
     "itemName": "Nintendo Classic", 
     "description": "Classic nintendo Console from the 80th...", 
     "price": 75, 
     "quantity": 2 
    } 
    ], 
    "_links": { 
    "self": { 
     "href": "http://localhost:8082/carts/2" 
    }, 
    "cart": { 
     "href": "http://localhost:8082/carts/2" 
    }, 
    "checkout": { 
     "href": "http://localhost:8083/order" 
    } 
    } 
} 

Est il y a une annotation qui fait ce travail ou quelque chose d'autre. J'ai essayé de l'ajouter dans le CartResourceProcessor (org.springframework.hateoas.ResourceProcessor) mais il n'y a que la possibilité d'ajouter des liens supplémentaires. Ou dois-je ajouter une valeur de classe totalAmount?

Répondre

0

Oui, vous pouvez y parvenir en annotant votre méthode avec Jackson annotation @JsonProperty

Code exemple

@JsonProperty("totalAmount") 
public double computeTotalAmount() 
{ 
    // compute totalAmout and return it 
} 
+0

Oui @JsonProperty ("totalAmount") faire l'amende d'emploi. Je vous remercie. – Rocks360

0

Et pour répondre à la question suivante possible que vous obtenez après avoir lu cela. Comment le totalAmount est calculé. Voici l'extrait

public Class Cart{ 
    // some Class values 

    @JsonProperty("totalAmount") 
    public BigDecimal total(){ 

     return items.stream() 
       .map(Item::total) 
       .reduce(BigDecimal.ZERO, BigDecimal::add); 
    } 
} 

public class Item{ 
    // some Item values 

    @JsonProperty("totalAmount") 
    public BigDecimal total(){ 
     return price.multiply(new BigDecimal(this.quantity)); 
    } 
} 

Sorties quelque chose de similaire à ceci:

{ 
    "creationDate": "2016-12-07T09:45:38.000+0000", 
    "items": [ 
    { 
     "itemName": "Nintendo 2DS", 
     "description": "Konsole from Nintendo", 
     "price": 300.5, 
     "quantity": 3, 
     "totalAmount": 901.5 
    }, 
    { 
     "itemName": "Nintendo Classic", 
     "description": "Classic nintendo Console from the 80th...", 
     "price": 75, 
     "quantity": 2, 
     "totalAmount": 150 
    } 
    ], 
    "totalAmount": 1051.5, 
    "_links": { 
    "self": { 
     "href": "http://localhost:8082/carts/2" 
    }, 
    "cart": { 
     "href": "http://localhost:8082/carts/2" 
    }, 
    "checkout": { 
     "href": "http://localhost:8083/order" 
    } 
    } 
} 

espérons qu'il vous aidera :)