RESTful Springアプリケーションを介してオブジェクトのJSON表現を返す方法は?

ムハンマド・ゲルバナ

Springバージョン4.2をターゲットにしています。そのため、リファレンスドキュメントのいくつかのページを読んだ後このアプリケーションを開発しました

このアプリケーションには1つの方法しかありません。このメソッドは、非常に単純なJavaオブジェクトのJSON表現を返すことができるはずです。(アプリケーションをデプロイした後、次のURLからメソッドを呼び出すことができます:http:// localhost:8080 / srm / test

代わりに、次のエラーが発生します。srmはアプリのコンテキストルートです)

HTTP ERROR 500

Problem accessing /srm/test. Reason:

    Circular view path [test]: would dispatch back to the current handler URL [/srm/test] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
Caused by:

javax.servlet.ServletException: Circular view path [test]: would dispatch back to the current handler URL [/srm/test] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
    at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:205)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:145)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

検索したところ、Springがコントローラーのメソッドにデフォルトのビューアーを割り当てていることがわかりました。ビューが何であるかはわかりませんが、検索した後、ContentNegotiatingViewResolverが私にとって適切なビューであることがわかりました。しかし、それについて読んだ後、メソッドの@RequestMappingにproducesプロパティを指定するか、ブラウザーからアプリケーションに送信されるHTTPリクエストにAcceptヘッダーを指定する必要があると思いました。しかし、それはどれもうまくいきませんでした!

ここで私がやろうとしているのは、Springが管理するRESTfulアプリケーションからJSONオブジェクトとしてシリアル化されたオブジェクトを返すことができるようにすることだけです。現時点ではSpringBootを使用したくありません。

これが私のファイルです。web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>MyAPI</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyAPI</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

MyAPI-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.jarmy.lab.spring.rest" />
</beans>

RESTfulコントローラー

package com.jarmy.lab.spring.rest;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyAPI {

    @RequestMapping(value = "/test", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public MyUser hello() {
        MyUser user = new MyUser();
        user.setName("Abbas");
        user.setId(12);
        return user;
    }
}

応答として返されるサンプルDTO(JSON形式)

package com.jarmy.lab.spring.rest;

public class MyUser {
    private String name;
    private long id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}
アリ・デガニ

まず、次のコードを次のコードに追加して、アノテーションベースのMVCを有効にしますMyAPI-servlet.xml

<mvc:annotation-driven />

したがって、次のようにMyAPI-servlet-xmlなります。

<?xml version="1.0" encoding="UTF-8"?>
<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <mvc:annotation-driven/>
    <context:component-scan base-package="com.jarmy.lab.spring.rest"/>
</beans>

次に、jackson-databind依存関係を追加します。

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.0</version>
</dependency>

これを追加するとMappingJackson2HttpMessageConverter、JSONとの間で変換するが登録されます。また、現在のジャクソンマッパーの依存関係を削除します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

RESTful アプリケーション - 最後の 10 回の REST 呼び出しを返す方法

分類Dev

API RESTful(アプリケーションエクスプレス)のGETリクエストを行う方法は?

分類Dev

春のブートRESTfulアプリケーションで、ログインしたユーザーが再度ログインするのを防ぐ方法は?

分類Dev

Restful APIを使用して春にBeanオブジェクトの文字列を自動トリムする方法は?

分類Dev

Restful APIを使用して春にBeanオブジェクトの文字列を自動トリムする方法は?

分類Dev

同じ言語を使用して、スケーラブルなアプリケーション (デスクトップ、Web、および Restful Api) を作成します

分類Dev

ASP.Net Core Restful CotrollerでJsonオブジェクトエラーを返す方法は?

分類Dev

RESTful Webサービスを介したオブジェクトの編集

分類Dev

SpringBootマイクロサービスアプリケーション(RESTful)をサーバーレスとしてAWS Lambdaにデプロイする方法は?

分類Dev

TypeError:flask_jwt_extended int RESTful APIを使用している場合、関数型のオブジェクトはJSONシリアル化できません

分類Dev

GenericEntity <List <T >>を介してRESTful ResponseオブジェクトでJava-genericsテンプレートタイプを使用する

分類Dev

RESTfulアプリケーションで競合状態を処理する方法

分類Dev

RESTFul OracleAPEXの使用

分類Dev

RESTfulアプリケーションでの楽観的ロック

分類Dev

RESTful Webサービスはオブジェクトのリストを取得します

分類Dev

RESTfulアプリケーションをApacheサーバーにデプロイする方法は?

分類Dev

画像バイト配列をjsonとしてAndroidアプリケーションからC#RESTfulサービスに渡します

分類Dev

PUT Restful ServiceでJSONオブジェクトを使用する

分類Dev

RailsアプリケーションでRESTful検索候補を設計する方法は?

分類Dev

RESTful API用に別のアプリケーションを作成するのはなぜですか?

分類Dev

WildFlyのRESTfulアプリケーションでの認証

分類Dev

Google App Engine Java上のRESTfulアプリケーション?

分類Dev

CDIを使用したJavaバックエンドRESTfulサーバーアプリケーション

分類Dev

シェルスクリプトを使用して、RESTfulサービスから返されたjsonを解析します

分類Dev

Spring RESTfulアプリケーションにResponseEntity <T>および@RestControllerを使用する場合

分類Dev

RESTfulな方法でアクション呼び出しを実装する方法は?

分類Dev

フロントエンドとRESTfulの両方を備えたSpringBootアプリケーション

分類Dev

JEE Restful Bind JSON to JAVA

分類Dev

Flask-RESTful-nullを返す代わりにオブジェクトプロパティを返さない

Related 関連記事

  1. 1

    RESTful アプリケーション - 最後の 10 回の REST 呼び出しを返す方法

  2. 2

    API RESTful(アプリケーションエクスプレス)のGETリクエストを行う方法は?

  3. 3

    春のブートRESTfulアプリケーションで、ログインしたユーザーが再度ログインするのを防ぐ方法は?

  4. 4

    Restful APIを使用して春にBeanオブジェクトの文字列を自動トリムする方法は?

  5. 5

    Restful APIを使用して春にBeanオブジェクトの文字列を自動トリムする方法は?

  6. 6

    同じ言語を使用して、スケーラブルなアプリケーション (デスクトップ、Web、および Restful Api) を作成します

  7. 7

    ASP.Net Core Restful CotrollerでJsonオブジェクトエラーを返す方法は?

  8. 8

    RESTful Webサービスを介したオブジェクトの編集

  9. 9

    SpringBootマイクロサービスアプリケーション(RESTful)をサーバーレスとしてAWS Lambdaにデプロイする方法は?

  10. 10

    TypeError:flask_jwt_extended int RESTful APIを使用している場合、関数型のオブジェクトはJSONシリアル化できません

  11. 11

    GenericEntity <List <T >>を介してRESTful ResponseオブジェクトでJava-genericsテンプレートタイプを使用する

  12. 12

    RESTfulアプリケーションで競合状態を処理する方法

  13. 13

    RESTFul OracleAPEXの使用

  14. 14

    RESTfulアプリケーションでの楽観的ロック

  15. 15

    RESTful Webサービスはオブジェクトのリストを取得します

  16. 16

    RESTfulアプリケーションをApacheサーバーにデプロイする方法は?

  17. 17

    画像バイト配列をjsonとしてAndroidアプリケーションからC#RESTfulサービスに渡します

  18. 18

    PUT Restful ServiceでJSONオブジェクトを使用する

  19. 19

    RailsアプリケーションでRESTful検索候補を設計する方法は?

  20. 20

    RESTful API用に別のアプリケーションを作成するのはなぜですか?

  21. 21

    WildFlyのRESTfulアプリケーションでの認証

  22. 22

    Google App Engine Java上のRESTfulアプリケーション?

  23. 23

    CDIを使用したJavaバックエンドRESTfulサーバーアプリケーション

  24. 24

    シェルスクリプトを使用して、RESTfulサービスから返されたjsonを解析します

  25. 25

    Spring RESTfulアプリケーションにResponseEntity <T>および@RestControllerを使用する場合

  26. 26

    RESTfulな方法でアクション呼び出しを実装する方法は?

  27. 27

    フロントエンドとRESTfulの両方を備えたSpringBootアプリケーション

  28. 28

    JEE Restful Bind JSON to JAVA

  29. 29

    Flask-RESTful-nullを返す代わりにオブジェクトプロパティを返さない

ホットタグ

アーカイブ