2015-07-16 7 views
5

Verwenden von Play Framework.Wie vermeidet man das Runden eines langen Werts auf der Client-Seite?

-Controller

@BodyParser.Of(BodyParser.Json.class) 
public static Result getResponseJson(Long id){ 
    List<DataField> entities = new Model.Finder<>(Long.class, DataField.class) 
     .where("response_id = " + id).findList(); 
    Response response = new Response(entities, id); 
    return ok(toJson(response)); 
} 

Die Response Einheit ist:

public class Response { 
    private Long uuid; 
    private Map<TableField, String> map = new HashMap<>(); 
    ...constructors, getters and setters... 
} 

ich die Antwort mit POSTMAN überprüfen. Auf der Registerkarte "Raw" Ich habe:

{"uuid":3942015886343226874,"map":{"Work":"Contract","locale":"Mogilev"}} 

Sie auf der Registerkarte "Pretty":

{ 
    "uuid": 3942015886343227000, 
    "map": { 
    "Work": "Contract", 
    "locale": "Mogilev" 
    } 
} 

Warum ist die UUID abgerundet wurde?

+0

Max. Nummer in js ist +/- 9007199254740992. JS erlaubt nur 16 signifikante Stellen in einer Zahl. – barbarian

+0

Die einzige Lösung, die ich sehe, ist Uuid als String in Java zu verwenden, so dass es wie eine Zeichenfolge angezeigt und betrieben wird, so dass der Wert nicht geändert wird. Aber irgendwie kann JS in anderen Funktionen wie eine Zahl positionieren, also wird es runden ... – barbarian

Antwort

2

Es bezieht sich nicht auf Playframework, es ist ein Browserproblem. Öffnen Sie die Entwicklerkonsole in Ihrem Browser und versuchen, diese -

var c = 3942015886343226874; 
console.log(c); 

Dies druckt - 3942015886343227000

wegen Nummer Grenze in JavaScript.

Es ist besser, String im Falle von UUID zu verwenden.