不能将json映射到POJO

时间:2018-01-30 06:08:36

标签: spring spring-boot

我的控制器如下所示。

@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。

1 个答案:

答案 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每次请求时都会创建一个新实例。