1

我的一个帖子参数传递了一个字符串,该字符串有助于初始化我的 Bean 拥有的一个实例变量对象,但我需要一个自定义反序列化器来执行此操作,因为该参数是一个字符串。有没有办法从 POST 参数手动创建一个 Bean?我的 bean 有很多可以从 POST 参数手动实例化的实例字段(比如说很多字符串字段),所以我仍在尝试利用 @ModelAttribute 自动映射字符串和整数等字段的能力。我只想要一个可以为某些字段实现的特殊情况,如下Color所示。

我的豆子:

public class Test {
    private String name;
    private String className;
    private String schoolName;
    private String country;
    private Color color;
}

public class Color {
    private String name;
    private int r;
    private int g;
    private int b;

    public static Color fromString(String name) {
       Color color = new Color();
       color.name = name;
       // do some processing to initialize r, g, b based on name
    }
}

我的 JSP:

<form method="POST" action="/getTests">
<input type="text" name="name">
<input type="text" name="className">
<input type="text" name="schoolName">
<input type="text" name="country">
<input type="text" name="colorName">

我的控制器:

@Controller
public class HomeController {
    @RequestMapping(value = {"/getTests"}, method = RequestMethod.POST)
    public String getTests(ModelMap modelMap, @ModelAttribute Test test) {
        System.out.println(test);
        modelMap.addAttribute("tests", tests);
        return "index";
    }
}

所以我想写这样的东西,在 @ModelAttribute 完成初始化nameclassNameschoolName和的工作之前或之后调用它country

public class TestDeserializer {
    public class Test deserialize(Map<String, Object> requestMap) {
       Test test = new Test();
       String colorName = requestMap.get("colorName");
       if (colorName != null) {
           test.setColor(Color.fromString(colorname));
       }
       return test;
    }
}
4

0 回答 0