0

extjs asfrontend と Spring as backend に基づいて小さなアプリケーションを構成しようとしています。したがって、extjs からサーバーと通信するには、ストアでプロキシ ライターを構成する必要があります。私のプロキシ構成は次のようになります。

proxy : {

    type: 'rest',

    reader: {
        type: 'json',
        idProperty: 'id',

        root: 'data',
        totalProperty: 'total',
        successProperty: 'success',
        messageProperty: 'message'
    },

    writer: {
        type: 'json',
        allowSingle: true,
        writeAllFields: true,
        root: 'data'
    },

    api: {
        read:       'countries',
        create:     'country/add',
        update:     'country/update',
        destroy:    'country/delete'
    }
}

そして、Spring Controller の @RequestMapping は次のとおりです。

@ResponseStatus(value = HttpStatus.OK)
@RequestMapping(value = COUNTRY_PATH + DELETE_PATH + SLASH + DELETE_ID_PARAM, method = RequestMethod.DELETE)
public void delete(@PathVariable(DELETE_ID_PARAM) Integer deleteId, @RequestParam Object data)  {
    System.out.println(data.toString());
    countryService.deleteCountry(deleteId);
}

Tomcat は毎回「400 Bad request」に応答し、「クライアントから送信されたリクエストは構文的に正しくありません」という説明が表示されます。

ただし、プロキシ タイプを ajax に変更し、requestMapping を POST リクエストの取得に変更すると、すべて正常に動作します。

4

2 に答える 2

2

パス変数の構文が正しくないようです:

それは次のようなものでなければなりません

@ResponseStatus(value = HttpStatus.OK)
@RequestMapping(value = COUNTRY_PATH + DELETE_PATH + SLASH + "{" + DELETE_ID_PARAM + "}", method = RequestMethod.DELETE)
public void delete(@PathVariable(DELETE_ID_PARAM) Integer deleteId, @RequestParam  Object data)  {
    System.out.println(data.toString());
    countryService.deleteCountry(deleteId);
}

また、Webアプリケーションの起動時に次のような行が表示されることを確認してください

INFO   [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] (MSC service thread 1-4) Mapped "{[/myapp/country/delete],methods=[DELETE],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto   public void com.myorg.web.MyController.delete(@PathVariable(DELETE_ID_PARAM) Integer deleteId, @RequestParam  Object data)

行は、メソッドがこの URL の DELETE メソッドを処理するために登録されていることを確認します。

于 2014-04-26T20:15:24.100 に答える
0

Tomcat/conf/web.xml を見ると、次のようなエントリが表示されます。

- <!--    readonly            Is this context "read only", so HTTP           --> 
- <!--                        commands like PUT and DELETE are               --> 
- <!--                        rejected?  [true]        

基本的に、サーバー上で put および delete コマンドを許可することは一般的に悪い習慣です。デフォルトでは、Tomcat はそれらをオフにすることで保護します。

安らかなサービスの場合、puts/delete を Post にマップするのはかなり一般的な方法です。

于 2013-11-14T17:57:50.053 に答える