有没有办法转换自定义对象并在接收为POSTed JSON后在方法签名中验证它?

时间:2014-09-20 17:47:38

标签: java json spring

我需要将收到的json对象转换为自定义实体类型Product并进行验证。之后我需要坚持下去。有没有办法使用注释和Spring框架支持RESTful Web服务来使用注释和控制器的方法签名?

控制器

@RestController
@RequestMapping("/")
public class pController {

        @RequestMapping(value = "/addProduct", method = RequestMethod.POST)
        @ResponseBody
        public String addProduct(Model model, @Valid Product product , 
                                            BindingResult result){
                // somehow get converted json as Product, should be already validated
          }

实体

@Table(name = "product")
@Entity
public class Product implements Serializable {
    @Id
    @Column(name = "product")
    @GeneratedValue
    private int product;
     @Column(name = "name")
     @Basic
     @NotEmpty
     private String name;
        ...
    } 

1 个答案:

答案 0 :(得分:1)

如果您使用的是Spring 3.1或更高版本,则可以轻松完成。只需将consumes属性放在@RequestMapping中,并在@RequestBody参数之前提供Product,如下所示:

    @RequestMapping(value = "/addProduct", method = RequestMethod.POST, consumes="application/json")
    @ResponseBody
    public String addProduct(Model model, @RequestBody Product product , 
                                        BindingResult result){
            // you get your desired product object!
    }

最重要的是,将 jackson 作为项目的依赖项。

  • 对于基于xml的配置,您需要<mvc:annotation-driven />
  • 对于基于java的配置,只需将@EnableWebMvc放在配置类

那就是它!

修改

是的,您必须在@Valid之前使用@RequestBody注释,因为@RequestBody只是将Json转换为您期望的Class对象,它不会针对您的休眠验证对象验证配置。为此,您必须将@Valid注释与@RequestBody放在一起。