【问题标题】:403 Forbidden returned when attempting to save to database尝试保存到数据库时返回 403 Forbidden
【发布时间】:2013-05-19 02:16:23
【问题描述】:

我正在尝试使用 Spring 和 Hibernate 一次将多条记录保存/更新到我的数据库 (sql-developer)。我通过控制器通过 ajax 调用将数据传递到服务层、Dao、循环,该循环遍历我的 Hvo 对象列表并确定它是否已经在数据库中,然后保存新记录或更新当前记录。一旦它通过了这个循环(看起来很成功),我得到一个 403 错误并且页面上没有警报。我在 Eclipse 中的堆栈跟踪没有错误。

这是我的 javascript:

function saveLimXrefHvo(){

var list = []; 

//declare variables for the data pieces
$('#limAssigned li').each(function (index, li) {
var cdeBusUnit = $('select[name="cde_bus_unit"]').val();
var cdeRatingPlan = $('select[name="cde_rating_plan"]').val();
var cdeLimit = $(this).attr('id');
var txtLimitRptOcc = $('#textOcc').val();
var txtLimitRptCm = $('#textCM').val();
var uidMod = $('#saveRTnumberLimXref').val();
var numSortOrder = (index + 1);

//put the variables in the JSON object
var JSONObject = {
        "cdeBusUnit" : cdeBusUnit,
        "cdeRatingPlan" : cdeRatingPlan,
        "cdeLimit" : cdeLimit,
        "txtLimitRptOcc" : txtLimitRptOcc,
        "txtLimitRptCm" : txtLimitRptCm,
        "uidMod" : uidMod,
        "numSortOrder" : numSortOrder
};

list.push(JSONObject);

});
var dat = JSON.stringify(list);

$.ajax({
    type : 'PUT',
    url : 'saveLimXrefHvo.do',
    contentType : 'application/json',
    data : dat,
    success : function(){
        alert("This record has been successfully saved.");
    }
});//end ajax

}

这是我的控制器方法:

    @RequestMapping(value = "/saveLimXrefHvo.do", method = RequestMethod.PUT,
consumes="application/json")

public void saveLimXrefHvo(@JsonParam(innerType=LimitXrefHvo.class) 
List<LimitXrefHvo> limitXrefHvoList) throws JsonParseException, 
JsonMappingException, IOException {

limitService.saveLimXrefHvo(limitXrefHvoList);
}

我一直在试图弄清楚为什么我现在整个早上都收到 403 错误。我尝试通过在循环的“else”部分中单独删除和单独保存来更改 Dao 方法,但这不起作用。有人建议在控制器方法中添加“消耗”。那也没有用。我愿意接受建议、想法和问题。提前致谢!

【问题讨论】:

    标签: java javascript spring hibernate oracle-sqldeveloper


    【解决方案1】:

    您的 Spring 控制器是否知道如何处理无响应(即void)?

    尝试返回一个表明操作成功的 JSON 对象。

    示例:

    {
      "success": true,
      "message": "Successfully saved... blah blah"
    }
    

    实现可能类似于:

    *看不见(我添加了produce="application/json")

    @RequestMapping(value = "/saveLimXrefHvo.do", method = RequestMethod.PUT, consumes="application/json", produces="application/json")
    public ResponseMap saveLimXrefHvo(@JsonParam(innerType=LimitXrefHvo.class)  List<LimitXrefHvo> limitXrefHvoList) throws JsonParseException, JsonMappingException,  IOException {
    
        limitService.saveLimXrefHvo(limitXrefHvoList);
    
        return new ResponseMap("Success");
    }
    

    【讨论】:

    • 是的。就是这样。我添加到我的 js 数据类型 application/json 并创建了一个响应映射,如下所示: ResponseMap responseMap = new ResponseMap(); responseMap.put("成功", true); responseMap.put("message", "这条记录已成功保存。");
    • 其实这样更好:return new ResponseMap("这条记录已经保存成功。");
    • 如果您不需要响应正文,请使用:@ResponseStatus(HttpStatus.NO_CONTENT) 注释上述方法,这将返回指示成功的 HTTP 204(但没有正文)。
    • @Jukka 我非常喜欢这个选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多