我有两个模特。
@Entity
class Product {
@Id
private String id;
private String name;
@ManyToOne(optional = false)
@JoinColumn(name = "category_id", referencedColumnName = "id")
@NotNull(groups = {CREATE.class, UPDATE.class})
private Category category;
...
}
@Entity
class Category {
@Id
private String id;
private String name;
...
}
@RestController
@RequestMapping(path = "/product")
class ProductController {
@RequestMapping(method = RequestMethod.POST)
public void create(@ModelAttribute Product product) {
...
}
}
我想向ProductController发送请求:
http POST http://localhost:8080/product name=='Product 1' category=1
param类别是分类到db的id,但是spring不理解它。
是否可以这样做?
答案 0 :(得分:0)
嗯,你的授权类是可以的,但是在POST请求中查看参数真的很奇怪,特别是你把它放在这里。 这是我的样本正常工作
public class Product {
private String id;
private String name;
private Category category;
******
}
public class Category {
private String id;
private String name;
*******
}
@RestController
@RequestMapping(path = "/product")
public class ProductController {
@RequestMapping(method = RequestMethod.POST)
public void create(@ModelAttribute Product product) {
Product prd1 = product;
prd1.getId();
}
}
以防万一这是appConfig:
@Configuration
@EnableWebMvc
public class AppConfig {
}
就是这样。现在,您的控制器希望获得一条Product实例的消息。 让我们继续吧。在POST查询中查看参数非常奇怪。我已经进行了一些测试,他们没问题 - 只需将数据作为请求体传递!不管你有什么。例如,让我们修改控制器,如下所示:
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public void create(@ModelAttribute Product product) {
Product prd1 = product;
prd1.getId();
}
}
现在你必须发送一条POST消息,其主体包含一个JSON格式的产品数据,即
{ "id": 1 }
它适用于spring支持的所有其他格式