データベース テーブルを更新する安らかなサービス コンポーネントをセットアップしようとしています。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 データは有効だと思います。どんな助けでも大歓迎です。ありがとう。