2016-05-26 10 views
0

私のコントローラで定義されたアクションの戻り値の型としてMapのJSON表現を返そうとしています。 Spring - マップからJSONを返します

この

は、メソッドそのものです:

@RequestMapping(value = "/executeRetrieve", method = RequestMethod.POST, produces = "application/json; charset=utf-8") 
public @ResponseBody Map<String, Object> executeAction() { 
    Map map = new HashMap(); 
    map.put("message", "hello"); 

    return map; 
} 

しかし、私はそのアクションを呼び出すとき、私はエラー406を得続ける:へSpringの変換に関連していない問題を意味

HTTP Status 406 - description: The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers. 

JSON、そうですか?

UPDATE - これは私のコンテキストのコンフィギュレーションです:

public class ServletInitializer implements WebApplicationInitializer { 
public void onStartup(ServletContext container) throws ServletException { 
    AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
    context.register(ServletConfiguration.class); 
    context.setServletContext(container); 

    ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(context)); 
    servlet.setLoadOnStartup(1); 
    servlet.addMapping("/"); 
} 

}

+0

リクエストヘッダを投稿してください。あなたの 'produce'節は非常に特殊で、通常は必要ありません(Springはあなたのためにコンテンツの交渉を行います)。また、コンテキストをどのように設定していますか? - Spring Boot? – chrylis

+0

@chrylis私の投稿を更新しました。そこに設定を入れました –

+0

メソッドがjsonを生成している場合は、文字列の代わりにマップを返すのはなぜですか?私は、JavaのjsonライブラリのほとんどがMapオブジェクトをJsonObjectに変換し、次にtoStringを –

答えて

0

私は初めから行っているべきものでした。 SpringはオブジェクトをJSONにレンダリングすることができます。したがって、一貫性、組織、そして必須オブジェクト指向プログラミングのために、私は応答として必要なすべての属性を含むモデルクラスを作成し、Springにレンダリングを処理させました。最終的なコードは次のとおりです。

@RequestMapping(value = "/executeRetrieve", method = RequestMethod.POST) 
public @ResponseBody Student executeRetrieve(HttpServletRequest request) { 
    String user = request.getParameter("user"); 
    String password = request.getParameter("password"); 

    return loginService.executeRetrieve(user, password); 
} 

ありがとう、みなさん。

関連する問題