2015-09-25 84 views
0

我需要從包含Javascript(基於Angular的)框架所需的一些變量的MVC應用程序生成一個Javascript文件。將Java對象打印到Javascript文件

控制器將產生輸出如

var currentUser = {userId: "jdoe", firstname: "John", lastname: "Doe"}; 
var somethingElse = []; 

之前你問是否有可能檢索來自AJAX調用的信息,讓我說,就目前來看,這是不可能的。

我想問一下是否有一個簡單,優雅和強大的方法來編組一個普通的Java對象到Javascript表示法。

到目前爲止,我已經嘗試利用JSON,醜陋的閱讀,而不是穩健的結果

printWriter.println(MessageFormat.format("var currentUser = JSON.parse(''{0}'');", objectMapper.writeValueAsString(user))); 

要注意:

  1. JSON語法報價屬性的名稱,而JavaScript不。 JSON和Javascript類似但不同。所以我需要解析JSON,而不是寫整個JSON
  2. JSON允許單引號',但這樣的語法JavaScript的繩剪斷,所以我需要逃脫單引號,如果任何
  3. 後,我轉義引號,我不t知道其他可能的陷阱

所以我想問一下,如果有一種更簡單的方法來將這樣一個對象以更強大但更智能的方式編組爲Javascript。

不使用AJAX是當前的要求。在一次調用中可以執行一次「大量」AJAX調用以便一次檢索所有需要的變量時,這將是永久的解決方案。

+0

你可以簡單地封送對象爲JSON,然後從你的後端輸出前,逃避所有的單引號(用反斜槓\\)。在這一點上,簡單地調用JSON.parse就可以了。 – CollinD

回答

0

我發現自己是傑克遜能夠從輸出去除雙引號JSON

final ObjectMapper objectMapper = new ObjectMapper().configure(Feature.QUOTE_FIELD_NAMES, false); 
pw.println(MessageFormat.format("var currentUserInfo = {0};", objectMapper.writeValueAsString(user))); 

docs

QUOTE_FIELD_NAMES

公共靜態最終JsonGenerator.Feature QUOTE_FIELD_NAMES的

確定是否使用JSON規範指定的雙引號引用JSON對象字段名稱的功能。添加了禁用引用的功能,以支持通常不需要的用例,這些用例通常在直接使用Javascript時發生。

默認情況下啓用功能(因爲它是JSON規範所要求的)。

這將產生一個輸出絕對不是一個有效的JSON,但是在這個問題說我不感興趣的JSON。

在這種情況下,理論上不需要轉義單引號。

輸出,符合該

var currentUserInfo = {username:"root",completeName:"Administrator",email:null,locale:"it_IT",accountExpirationDate:null,passwordExpirationDate:null,passwordChangeable:false,creationDate:null,lastLogin:null,status:null..........}; 
0

使用標準庫來做到這一點。

您可以將java對象轉換爲json字符串(例如使用jackson)。然後你需要使用這個字符串將它添加到一段JavaScript代碼。

ObjectMapper mapper = new ObjectMapper(); 
String json = mapper.writeValueAsString(new Test()); 

// Now use json to add it in the custom javascript code