我将控制器的属性编辑器指定为:
@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
}
答案 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解释的机制。