加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 没有在AJAX(JSON)请求上调用PropertyEditor

发布时间:2020-12-15 08:49:46 所属栏目:Java 来源:网络整理
导读:我在表单提交上遇到Ajax请求问题.表单包含以下stringify JSON数据: {"articleContent":"paaa/p","title":"Po vyplnění titulku aktuality budete","header":"aa","enabled":false,"timestamp":"1358610697521","publishedSince":"03.01.2013 00:00","publ
我在表单提交上遇到Ajax请求问题.表单包含以下stringify JSON数据:

{"articleContent":"<p>aaa</p>","title":"Po vyplnění titulku aktuality budete","header":"aa","enabled":false,"timestamp":"1358610697521","publishedSince":"03.01.2013 00:00","publishedUntil":"","id":"10"}

当json包含“03.01.2013 00:00”值时,服务器响应为400 Bad Request

问题是,不调用自定义DateTimePropertyEditor(使用@InitBinder注册),并且不传输String格式的DateTime.你有什么想法如何解决这个问题?

控制器映射方法,即处理请求

@RequestMapping( value = "/admin/article/edit/{articleId}",method = RequestMethod.POST,headers = {"content-type=application/json"})
public @ResponseBody JsonResponse  processAjaxUpdate(@RequestBody Article article,@PathVariable Long articleId){
    JsonResponse response = new JsonResponse();
    Article persistedArticle = articleService.getArticleById(articleId);
    if(persistedArticle == null){
        return response;
    }
    List<String> errors = articleValidator.validate(article,persistedArticle);

    if(errors.size() == 0){
        updateArticle(article,persistedArticle);
        response.setStatus(JsonStatus.SUCCESS);
        response.setResult(persistedArticle.getChanged().getMillis());
    }else{
        response.setResult(errors);
    }

    return response;
}

InitBinder

@InitBinder
        public void initBinder(WebDataBinder binder) {
            binder.registerCustomEditor(DateTime.class,this.dateTimeEditor);
        }

解决方法

我使用@JsonDeserialize解决了这个问题

@JsonDeserialize(using=DateTimeDeserializer.class)
public DateTime getPublishedUntil() {
    return publishedUntil;
}

我必须实现自定义反序列化器.

public class DateTimeDeserializer extends StdDeserializer<DateTime> {

    private DateTimeFormatter formatter = DateTimeFormat.forPattern(Constants.DATE_TIME_FORMAT);

    public DateTimeDeserializer(){
        super(DateTime.class);
    }

    @Override
    public DateTime deserialize(JsonParser json,DeserializationContext context) throws IOException,JsonProcessingException {
            try {
                if(StringUtils.isBlank(json.getText())){
                    return null;
                }
                return formatter.parseDateTime(json.getText());
            } catch (ParseException e) {
                return null;
            }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读