2012-04-17 10 views
1

これは重複しているが、私は例として具体的な何かを見つけることができなかった場合はお詫び申し上げます。springmvc jsonの応答を使用

springmvcには次のコントローラがあります。

import java.text.DateFormat; 
import java.util.Date; 
import java.util.Locale; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

/** 
* Handles requests for the application home page. 
*/ 
@Controller 
public class HomeController { 

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 

    /** 
    * Simply selects the home view to render by returning its name. 
    */ 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String home(Locale locale, Model model) { 
     logger.info("Welcome home! the client locale is "+ locale.toString()); 

     Date date = new Date(); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 

     String formattedDate = dateFormat.format(date); 

     model.addAttribute("serverTime", formattedDate); 

     return "main"; 
    } 

} 

は、これは私が、私の質問があり、私はJSONレスポンスであることを、この応答を得ることができる方法は、このコントローラにハードコードに、すべてのJSON変換コードを持たずに、アクセス$ {SERVERTIME}があることを意味し。私はちょうど設定にいくつかのXMLを置くことができるので、レスポンスを以下のように変換することを知っているでしょうか。

{"serverTime": "12 12 2012"}

"main"はビュー(main.jsp)の名前なので、同じように動作させたいと思います。

http://code.google.com/p/google-gson/

ところであなたはAjaxのレスポンスを送信したいのではなくページを更新している場合、あなたのメソッド宣言に@ResponseBodyを追加し、:JSONはgsonと呼ばれるにJavaオブジェクトを変換するためのライブラリがあります

答えて

1

@ResponseBodyであなたの方法を注釈してください。

あなたの商品を返品してください、formattedDate。あなたは私の質問の底に気付いた場合

@RequestMapping(value = "/", method = RequestMethod.GET) 
    public String home(Locale locale, Model model) { 
     logger.info("Welcome home! the client locale is "+ locale.toString()); 

     Date date = new Date(); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 

     String formattedDate = dateFormat.format(date); 

     model.addAttribute("serverTime", formattedDate); 

     return "main"; 
    } 

    @RequestMapping(value = "/serverTime", method = RequestMethod.GET) 
    @ResponseBody 
    public String serverTime(Locale locale, Model model) { 
     Date date = new Date(); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 

     return dateFormat.format(date); 
    } 
+0

ああ、私はこれをしましたが、あなたは私の質問の最終行に気付くでしょう、これは私の意見が返される方法を破ります。両方を行うことは可能ですか? – david99world

+0

ああ、ごめんなさい。 AJAXを使用できますか? ビューをメインにロードしてから、JSONデータをリクエストしてください。 – bvulaj

+0

ええ、私のAJAXリクエストは、基本的にコントローラに要求するページを要求しますが、JSONのペイロードも返す必要があります。 JSONレスポンスのURLとhtmlの別のURLに行くことをお勧めしますか?それは少し厄介なようです。 – david99world

0

public @ResponseBody String home(Locale locale, Model model) { .. } 

JSON文字列を返します(この場合は、モデルを更新していないものとします)。

+0

ああ、これは、それが「メイン」ビューを返すよう私の見解処理を中断しますように、それはこのJSON応答を行い、内私の見解を扱う維持することが可能であるに見えますコントローラ? – david99world

+0

BrandonVがこれに答えてくれたと思います。 – JazzHands

関連する問題