springmvc使用实体类接收参数
这个问题,需要在springmvc的配置文件中,添加上AnnotationMethodHandlerAdapter这个类,具体配置参考博客:
参考1,
参考2
结合两个博客,我的配置
<!-- 用于将对象转换为 JSON ,支持前端表单请求和json请求,接收请求时自动转成pojo对象 -->
<bean id="stringConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=utf-8</value>
<value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringConverter"/>
<ref bean="jsonConverter"/>
</list>
</property>
</bean>
json请求中带时间字符串,怎么处理
参考链接,这个总结的很全面,赞!
我采用了其中比较方便的一种方式
@Table(name = "device_status")
public class DeviceStatus {
/**
* 主键
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "project_id")
private String projectId;
@Column(name = "device_id")
private String deviceId;
private Byte status;
@Column(name = "event_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")
private Date eventTime;
//此处两种格式注解效果一样
400错误表现说明
- 一般来说400错误是bad request 错误,通常是请求参数和接受参数不一致导致的。
- 正常的json请求中,如果有时间,那也只能是时间字符串(String类型)
- 实体类中定义的时间字段的类型是Date类型:private Date eventTime;
//请求参数,请求头中:Content-Type=“application/json”
//请求body如下
{
"projectId": "SZ0112",
"deviceId": "c55d9e190",
"status": 1,
"eventTime": "2019-10-22 13:31:23"
}
基于以上3个条件, springmvc 的controller中,使用@requestBody接收请求来的json时无法把String类型的 “eventTime”: "2019-10-22 13:31:23"属性字段匹配到实体类的时间字段private Date eventTime;
于是报错400 bad request