我的控制器如下所示。
@CrossOrigin
@RequestMapping(value = "/addenquiry", method = RequestMethod.POST, produces = "application/json")
public Response<Enquiry> addEnquiry(@RequestBody Enquiry enquiry,HttpSession session) {
Response<Enquiry> response = new Response<Enquiry>();
@Component
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Enquiry {
private String enqId;
//Getters and setters which are public
然而,当我使用
传递Json时{
"enqId;":"875421ekhrfkejhsjdf"
}
未映射,并打印null。
答案 0 :(得分:3)
您必须删除@Component
课程中的Enquiry
注释。如果添加像@Component
,@Controller
,@Service
这样的Spring注释,则指定该类将是一个spring bean。默认情况下,bean将是一个单独的bean,并且在上下文中只存在一个bean。
在您的情况下,您希望按每个请求发布一个新的查询对象。春天和杰克逊将在幕后为您做到这一点。如果没有@Component
注释,它将是普通的POJO,并且不存在于spring上下文中。
网站注意事项:如果您确实希望Enquiry
位于spring上下文中,则可以保留@Component
注释并添加范围prototype
。
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Enquiry {}
这指定spring每次请求时都会创建一个新实例。