【问题标题】:Spring MVC no matching editors or conversion strategy foundSpring MVC 找不到匹配的编辑器或转换策略
【发布时间】:2011-09-21 18:39:39
【问题描述】:

我正在尝试通过 jquery post 请求将自定义 javascript 对象(实际上是其 JSON 对象数组)发送到 spring 控制器。 服务器端因“bla-bla 找不到匹配的编辑器或转换策略”错误而失败。它不能从字符串转换为服务器端对象。 我找到了thisthis 示例,但我无法将它们放在一起使其工作。 我应该覆盖哪些 PropertyEditor 方法? 有人知道任何示例的链接吗? 谢谢。

控制器:

private class AddressFormEditor extends PropertyEditorSupport {
    protected Object convertElement(Object element)
    {
        String form = "";

        if (element instanceof String)
                form = (String) element;
        Logger logger = Logger.getLogger(getClass().getName());
        logger.warning(form);
        return form != null ? new AddressForm(form) : null;
    }
}

@InitBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
{       
      binder.registerCustomEditor(AddressForm.class, new AddressFormEditor());
}  
@RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView saveUser(@ModelAttribute UserForm form, HttpServletResponse response) {...}

用户窗体:

public class UserForm extends BaseForm {
private Long id;
private String login;
private String password;
private String confirmPassword;
private String type;
private String franchise;
private String roles;
private String firstName;
private String lastName;
private String salutation;
private String position;
private String birthDate;
private String passportNumber;
private String passportIssueBy;
private String passportIssueDate;
private String passportExpireDate;
private String nationality;
private AddressForm[] addresses;
private String notes; ... }

jQuery 请求:

var data = $('#userForm').serializeObject();
        data.addresses = addresses;
        $.ajax({
            traditional: true,
            type: 'POST',
            url: url + 'save',
            data: data,
            success: function(response) {
                if (response) {
                    initializeUser(response);
                    hideWait();
                }
                else {
                    showUsers();
                    $('#closeUserBtn').click();
                }
            },
            error: function() {
                error();
                hideWait();
            }
        });

Logger 写入地址是 '[object Object]' 但实际上有效的数组已发送到服务器

【问题讨论】:

  • 也许显示一些代码会有所帮助
  • 问题是我找不到任何String to Server-side object property editor的例子

标签: jquery ajax spring-mvc


【解决方案1】:

查看org.springframework.beans.propertyeditors(在spring-beans jar中)下的编辑器,其中包含spring提供的内置编辑器。

基本上,您需要覆盖setAsText()getAsText(),这允许您分别从字符串中读取对象并将对象写入为字符串。

CurrencyEditor 可以作为一个非常简单的例子。 CustomDateEditor 可以作为一个稍微复杂一点的。对于数组示例,请查看 ClassArrayEditor,例如。


但是,最好的方法是使用 JSON 映射技术,而不是自己解析 JSON;看看this post

【讨论】:

  • 感谢您的回复。问题是,如果我将 ModelAttribute 更改为 RequestBody,那么我无法响应 ModelAndView 对象(415 错误)。有没有办法让@RequestBody 作为输入参数和 ModelAndView 作为输出?谢谢
  • 将输入读取为@RequestBody 并返回@ModelAndView 应该没有任何问题。你测试过吗?
  • 感谢您的回复。现在好了,log4j 帮助找出了问题所在。
猜你喜欢
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多