如何对响应ajax调用返回的对象应用属性编辑器?

时间:2013-02-01 11:57:40

标签: ajax spring spring-mvc

我将控制器的属性编辑器指定为:

@InitBinder
    protected void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
        binder.registerCustomEditor(Date.class, editor);
    }

在我在AJAX调用中调用以下方法之前一直正常工作。

@RequestMapping(value = "searchCriteria", method = RequestMethod.GET)
    public @ResponseBody Set<SearchCriteria> loadSearchCriterias(){
        // call service method to load criterias
        Set<SearchCriteria> criterias = new HashSet<SearchCriteria>();
        SearchCriteria sampleCriteria = new SearchCriteria();
        sampleCriteria.setStartDate(new Date());
                criterias.add(sampleCriteria);
        return criterias;
         }

在这种情况下,自定义属性编辑器未将SearchCriteria中的截止日期转换为正确的格式。即使我通过AJAX调用返回对象,如何才能应用属性编辑器?

public class SearchCriteria{
    Date startDate;
    String name;
    // getter setters
}

1 个答案:

答案 0 :(得分:1)

我认为不可能为返回值应用属性编辑器。 Spring有一个转换器机制。

如果你返回json并且你的类路径中有Jackson,那么spring将使用它将对象转换为响应字符串。
如果你返回xml并且你的类路径中有JAXB,那么spring将使用它将对象转换为响应字符串。

如果您使用带有弹簧的Jackson库,则需要使用serializer告诉jackson您要如何序列化字段。

例如:

public class DateTimeSerializer extends JsonSerializer<Date> {

    @Override
    public void serialize(Date value, JsonGenerator jgen,
            SerializerProvider provider) throws IOException,
            JsonProcessingException {
        if (value != null) {
            SimpleDateFormat f = new SimpleDateFormat(format);
            jgen.writeString(f.format(value));
        }
    }

}

然后注释您的字段

@JsonSerialize(using = DateTimeSerializer.class)
private Date createdDate;

如果您想全局使用此功能,可以尝试使用here解释的机制。