0

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

@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
}
4

1 回答 1

1

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

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

如果您使用Jackson带有 spring 的库,那么您需要告诉杰克逊您想如何使用serializer 序列化该字段。

前任:

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;

如果你想在全局范围内使用它,你可以尝试这里解释的机制。

于 2013-02-01T12:30:55.073 回答