0

データベース テーブルを更新する安らかなサービス コンポーネントをセットアップしようとしています。Spring RestTemplate と apache commons restful impl の両方を使用してみましたが、どちらもうまくいかないようです。


オプション 1: Spring RestTemplate を使用すると、次のエラーが発生し
ます
。メソッド.PostMethod; 次のエラーが発生し
ますサーバー側エラー:
org.codehaus.jackson.JsonParseException: 予期しない文字 ('<' (コード 60)): 有効な値が必要です (数値、文字列、配列、オブジェクト、'true'、'false' または 'ヌル')

クライアント側のエラー: 要求エンティティが、要求されたメソッド () の要求されたリソースでサポートされていない形式であるため、サーバーはこの要求を拒否しました。
私の Restful サービス メソッドは "Post" という注釈が付けられ、"JSON" を使用します。RestFul 呼び出しを開始するクライアント側コントローラー、以下のコード

    @RequestMapping(value="/update", consumes="application/json")
public void updateMaintReport(
        @RequestBody Map<String, String> formModelData, 
        HttpServletRequest request, 
        HttpServletResponse response) 
        throws IOException,JsonMappingException {
    logger.log(LogLevel.DEBUG, "REACHED method updateMaintReport..");
    System.out.println("Reached method updateMaintReport.....");
    boolean errorEncountered = false;
    ReportingSession repSession = null;
    HttpSession session = request.getSession(false);

    if(session==null) {
        // TODO: code for handling invalid/expired session
    } else {
        repSession = (ReportingSession)session.getAttribute(ReportingWebConstants.REPORTING_SESSION);
        if(repSession==null) {
            errorEncountered = true;
        } 
    }

    if(!errorEncountered) {

        ServiceClient serviceClient = new ServiceClient();

        String servicesUrl = this.environment.getProperty("service_url_reports_data");
        String servicesName = this.environment.getProperty("service_name_reports_update_fnol");
        String serviceUrl = VIPUrlFactory.getServiceUrl(servicesUrl+servicesName);
        logger.log(LogLevel.DEBUG, "For update : serviceUrl: "+serviceUrl);

//Option 1: Using Spring RestTemplate :             
        LinkedMultiValueMap<String,String> headers = new LinkedMultiValueMap<String,String>();
        headers.add("Accept","application/json");
        headers.add("Content-type","application/json");
        List list = new ArrayList<Map<String, String>>(); list.add(formModelData);
        RestTemplate restTemplate = new RestTemplate();
        HttpEntity<List> requestEntity = new HttpEntity<List>(list, headers);

        ResponseEntity<List> fList = restTemplate.exchange(serviceUrl,
                HttpMethod.POST, 
                 requestEntity,
                List.class);


//Option 2: using org.apache.commons.httpclient.methods.PostMethod; -- Will be commented when option 1 block is uncommented     
        serviceClient.setParams(formModelData);
        serviceClient.setServiceUrl(serviceUrl);
        serviceClient.callRestServicePost();

        logger.log(LogLevel.DEBUG, "Posting data to service - to execute the update");

    }

}        

上記のコードでは、オプション 1 とオプション 2 のブロックは同時に実行されません。

以下は、Restful 呼び出しを受け入れるコード ブロック、私のサーバー側コードです。

    @RequestMapping(value = "/update", method = RequestMethod.POST)
public void updateMainRptData(@RequestBody Map<String, String> formModelData) throws ReportingIntegrationException,
        IOException, JsonMappingException {
    String updateStmt = "UPDATE CL_SCRIPTS SET DELETE_IND = #{delete_ind},  SCRIPT_DESC = #{script_desc}, SCRIPT_TXT = #{script_txt}WHERE   COMPANY_CD = #{company_cd} AND SCRIPT_NAME = #{script_name}AND PROMPT_ID = #{prompt_id}";
    ParameterObjectDTO paramObjDTO = new ParameterObjectDTO();

    logger.log(LogLevel.DEBUG,"In Services Web: updateMainRptData()");

    if(!formModelData.isEmpty()) {
        Set<String> keySet = formModelData.keySet();
        StringBuilder sb = new StringBuilder();
        for (String key : keySet) {
            sb.append(key).append(" -- ").append(formModelData.get(key)).append("\n");
        }
        logger.log(LogLevel.DEBUG, sb.toString());
    }

    paramObjDTO.setModalForQuery(formModelData);
    paramObjDTO.setUpdateSqlStmt(updateStmt);
    maintReportingSvc.updateMaintReport(paramObjDTO);

}        

ブラウザーに表示されるエラー メッセージは役に立ちませんが、JSON データは有効だと思います。どんな助けでも大歓迎です。ありがとう。 ここに画像の説明を入力

4

1 に答える 1