- 浏览: 276817 次
文章分类
最新评论
-
guji528:
oracle的统计函数真的很强大
Oracle 使用LAG和LEAD函数统计 -
haiyangyiba:
受教了
No Dialect mapping for JDBC type: 3 -
elvishehai:
能不能给个完整点的例子呀,我一直都没有试成功过,
简单的使用jackson的annotation -
miaoyue:
如果我想把name属性转成注释之后,之前的注释还在怎么做?
PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码 -
ianl_zt:
以上方法只适合在hibernate2中使用,现在hiberna ...
Hibernate的批量更新和删除
@JsonAutoDetect (class)
这是作用于类的annotation,主要用于指明该类使用annotation,并且可以自动侦测getter,setter,构造方法,以便生成json对象
@JsonIgnore (method/field):作用于方法或字段,用来表明,当生成json的时候忽略有该annotation的方法或字段
如题,以一个用户对象为例子:
- @Entity
- @Cache (usage = CacheConcurrencyStrategy.READ_WRITE)
- @JsonAutoDetect
- /**
- * 在此标记不生成json对象的属性,这里我标记了两个属性一个hibernateLazyInitializer属性,为什么要标记这个
- * 属性参考前面的博文,一个password属性,出于安全这个当然不能转换成json对象了,毕竟json是在前台调用的,
- * 如果你想转换的时候忽略某个属性,可以在后面继续加上
- */
- @JsonIgnoreProperties (value = { "hibernateLazyInitializer" , "password" })
- public class User
- {
- private Long id;
- private String name;
- private String password;
- private String email;
- private Date createAt;
- @Id
- @GeneratedValue (strategy = GenerationType.IDENTITY)
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this .id = id;
- }
- /**
- * 转换日期对象的输出格式,CustomDateSerializer 代码参考前面的博文
- */
- @JsonSerialize (using = CustomDateSerializer. class )
- public Date getCreateAt() {
- return createAt;
- }
- public void setCreateAt(Date createAt) {
- this .createAt = createAt;
- }
- /**
- * 其他的getter和setter省略
- */
- }
- @Entity
- @Cache (usage = CacheConcurrencyStrategy.READ_WRITE)
- @JsonAutoDetect
- /**
- * 在此标记不生成json对象的属性,这里我标记了两个属性一个hibernateLazyInitializer属性,为什么要标记这个
- * 属性参考前面的博文,一个password属性,出于安全这个当然不能转换成json对象了,毕竟json是在前台调用的,
- * 如果你想转换的时候忽略某个属性,可以在后面继续加上
- */
- @JsonIgnoreProperties (value = { "hibernateLazyInitializer" , "password" })
- public class User
- {
- private Long id;
- private String name;
- private String password;
- private String email;
- private Date createAt;
- @Id
- @GeneratedValue (strategy = GenerationType.IDENTITY)
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this .id = id;
- }
- /**
- * 转换日期对象的输出格式,CustomDateSerializer 代码参考前面的博文
- */
- @JsonSerialize (using = CustomDateSerializer. class )
- public Date getCreateAt() {
- return createAt;
- }
- public void setCreateAt(Date createAt) {
- this .createAt = createAt;
- }
- /**
- * 其他的getter和setter省略
- */
- }
@Entity @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @JsonAutoDetect /** * 在此标记不生成json对象的属性,这里我标记了两个属性一个hibernateLazyInitializer属性,为什么要标记这个 * 属性参考前面的博文,一个password属性,出于安全这个当然不能转换成json对象了,毕竟json是在前台调用的, * 如果你想转换的时候忽略某个属性,可以在后面继续加上 */ @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "password"}) public class User { private Long id; private String name; private String password; private String email; private Date createAt; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * 转换日期对象的输出格式,CustomDateSerializer 代码参考前面的博文 */ @JsonSerialize(using = CustomDateSerializer.class) public Date getCreateAt() { return createAt; } public void setCreateAt(Date createAt) { this.createAt = createAt; } /** * 其他的getter和setter省略 */ }
至于中间的什么service,dao都大同小异就不记录了
转到struts2 看看一个用jackson返回json对象的action是如何写的
- @Namespace ( "/security/user" )
- public class UserAction extends ActionSupport
- {
- @Action ( "list" )
- public String list() throws Exception {
- // 取得所有的用户
- List<User> list = userService.getAll();
- response = ServletActionContext.getResponse();
- // jackson
- ObjectMapper mapper = new ObjectMapper();
- // 把取得的用户list写入response
- mapper.writeValue(response.getWriter(), list);
- return null ;
- }
- }
- @Namespace ( "/security/user" )
- public class UserAction extends ActionSupport
- {
- @Action ( "list" )
- public String list() throws Exception {
- // 取得所有的用户
- List<User> list = userService.getAll();
- response = ServletActionContext.getResponse();
- // jackson
- ObjectMapper mapper = new ObjectMapper();
- // 把取得的用户list写入response
- mapper.writeValue(response.getWriter(), list);
- return null ;
- }
- }
@Namespace("/security/user") public class UserAction extends ActionSupport { @Action("list") public String list() throws Exception { // 取得所有的用户 List<User> list = userService.getAll(); response = ServletActionContext.getResponse(); // jackson ObjectMapper mapper = new ObjectMapper(); // 把取得的用户list写入response mapper.writeValue(response.getWriter(), list); return null; } }
这样我们在浏览器访问http://yourdomain/security/user/list 就可以返回一个包含所有用户信息的json数组
hibernate延时加载
因为jsonplugin用的是java的内审机制.hibernate会给被管理的pojo加入一个 hibernateLazyInitializer属性,jsonplugin会把hibernateLazyInitializer也拿出来操作,并读 取里面一个不能被反射操作的属性就产生了这个异常.
不过我用的是jackson来转json,所以想到了用annotation来排除hibernateLazyInitializer 这个属性
在你的pojo类声明加上:
转换格式设置
近日,使用Jackson转化JSON对象的时候,显示的时候,日期始终显示不正确,输出的日期是一串数字代表的时间戳,不符合要求,所以想到Jackson应当有方法设置输出的日期格式。后来一查果然有两种方式来实现:
1.普通的方式:
默认是转成timestamps形式的,通过下面方式可以取消timestamps。
- objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false );
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
这样将使时间生成使用所谓的use a [ISO-8601 ]-compliant notation, 输出类似如下格式的时间: "1970-01-01T00:00:00.000+0000".
当然也可以自定义输出格式:
- objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
- myDateFormat对象为java.text.DateFormat,具体使用清查java API
myDateFormat对象为java.text.DateFormat,具体使用清查java API
2.annotaion的注释方式:
先定义自己需要的格式,例如:
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.codehaus.jackson.JsonGenerator;
- import org.codehaus.jackson.JsonProcessingException;
- import org.codehaus.jackson.map.JsonSerializer;
- import org.codehaus.jackson.map.SerializerProvider;
- /**
- * java日期对象经过Jackson库转换成JSON日期格式化自定义类
- * @author godfox
- * @date 2010-5-3
- */
- public class CustomDateSerializer extends JsonSerializer<Date> {
- @Override
- public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
- SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd" );
- String formattedDate = formatter.format(value);
- jgen.writeString(formattedDate);
- }
- }
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.codehaus.jackson.JsonGenerator;
- import org.codehaus.jackson.JsonProcessingException;
- import org.codehaus.jackson.map.JsonSerializer;
- import org.codehaus.jackson.map.SerializerProvider;
- /**
- * java日期对象经过Jackson库转换成JSON日期格式化自定义类
- * @author godfox
- * @date 2010-5-3
- */
- public class CustomDateSerializer extends JsonSerializer<Date> {
- @Override
- public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
- SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd" );
- String formattedDate = formatter.format(value);
- jgen.writeString(formattedDate);
- }
- }
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.SerializerProvider; /** * java日期对象经过Jackson库转换成JSON日期格式化自定义类 * @author godfox * @date 2010-5-3 */ public class CustomDateSerializer extends JsonSerializer<Date> { @Override public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = formatter.format(value); jgen.writeString(formattedDate); } }
然后在你的POJO上找到日期的get方法
更多可以参考:http://wiki.fasterxml.com/JacksonAnnotations
发表评论
-
Jackson 入门
2011-02-16 10:25 22023原文链接: http://jackson.codehaus. ... -
Jackson 使用简介
2011-02-16 10:20 8099http://jackson.codehaus.org/ ... -
nexus-maven- repository-index.zip手动下载与设置
2010-04-16 14:46 12689问题描述: 在启动eclipse的时候,在maven控制 ... -
MyEclipse启动故障-Initializing Java Tooling
2010-04-16 14:43 5684最近安装新系统后,重新安装了JDK,然后启动以前安装的MyEc ... -
iframe跨域session丢失问题
2010-02-04 15:37 5546最近在做一个系统(A),需要在系统(A)中集成目前现存系统(B ... -
SSH常见问题及解决办法
2010-01-21 17:18 3820内容检索 1.警告: No configuratio ... -
SLF4J+logBack, 日志领域中的新秀
2009-04-25 13:57 3625Ceki Gülcü创造了日志领 ... -
struts2.1.6,spring2.5.6,hibernate3.3.1,annotations
2009-04-24 15:50 3106根据流程进行注意点的 ... -
用HttpClient来模拟浏览器GET POST
2009-01-09 11:37 2251一般的情况下我们都是使用IE或者Navigator浏览器来访问 ... -
java输出扭曲验证码
2008-11-07 16:43 5682import java.awt.Color; import j ... -
getOutputStream() has already been called for this
2008-11-07 16:30 2685有一个使用SerlvetResponse输出图像的例子,代码如 ... -
深入探索 高效的Java异常处理框架【转自www.bitsCN.com】
2008-11-03 11:58 2824摘要:本文从Java异常最基本的概念、语法开始讲述了Java异 ... -
Spring+Hibernate+Struts2整合文档
2008-11-03 10:44 3787一、 Spring+Hibernate整合: Spring整 ... -
Tomcat启动分析
2008-10-29 11:05 30131 - Tomcat Server的组成部 ... -
tomcat集群和负载均衡
2008-10-29 11:00 3486(一)环境说明(1)服务器 ... -
Log4j配置文件
2008-10-29 10:58 2304#配置根Logger,其语法为:log4j.rootLog ... -
c3p0连接池说明
2008-09-18 11:57 3209<c3p0-config> <def ... -
利用xfire编写webservice
2008-08-15 10:19 37691. xfire + spring 发布webserv ... -
struts + spring + xfire (组合)
2008-08-15 10:14 3914一般情况下, spring+ struts的组合,struts ... -
无所不能的“蚂蚁”--Ant(四)
2008-08-06 20:02 2262五.使用Ant运行本地程序 1.使用Ant运行windows的 ...
相关推荐
它扩展了jackson-core,提供了对Java Bean属性的自动映射,使得我们可以通过简单的注解将类实例转换为JSON,反之亦然。 3. **jackson-annotations.jar**:包含了一系列的注解,这些注解可以用来配置Jackson如何序列...
Jackson是Java领域中广泛使用...总的来说,Jackson-2.9.2是一个强大且高效的JSON处理库,它为Java开发者提供了丰富的工具和选项来处理JSON数据,无论是在简单的数据交换还是在复杂的应用场景中,都能展现出强大的威力。
总之,Jackson在Spring 4.X中扮演着重要角色,它使得JSON处理变得简单而高效。理解其组件和使用方法,有助于提升项目的开发效率和质量。在实际项目中,应优先使用最新版本的`jackson-databind`、`jackson-core`和`...
以下是一个简单的例子,展示了如何使用`ObjectMapper`将一个Java对象转换为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class User { private String name; private int ...
4. `fasterxml.jackson.jaxrs`模块:提供JAX-RS(Java API for RESTful Web Services)集成,使得在REST服务中使用Jackson变得简单。 5. `fasterxml.jackson.databind.module`模块:允许用户自定义模块,以便扩展...
创建一个简单的Java对象,如`User`,然后使用`ObjectMapper`进行序列化和反序列化操作: ```java public class User { private String name; private int age; // getters, setters, constructors... } ...
总的来说,Jackson是SpringMVC中处理JSON数据的关键工具,它使得在Java后端和前端之间交换数据变得更加简单和高效。这个名为"Jackson.rar"的压缩包可能是为了方便开发者快速在项目中集成不同版本的Jackson,以适应...
Jackson是Java领域中广泛使用的JSON库,主要用于处理JSON数据,包括序列化和反序列化。在SpringMVC框架中,Jackson扮演着重要角色,它允许我们通过Ajax请求进行JSON数据的交互,极大地提高了Web应用的响应速度和用户...
本文将深入探讨如何在Android中使用Jackson进行JSON解析,并通过手打Demo来展示其实用性和高效性。 首先,我们需要引入Jackson库。在`build.gradle`文件中添加依赖: ```groovy dependencies { implementation '...
3. **fasterxml.jackson.annotation**: 这个模块包含了各种注解,如`@JsonProperty`、`@JsonInclude`和`@JsonAutoDetect`等,这些注解允许开发者精细控制JSON序列化和反序列化的逻辑,比如忽略某些属性、自定义字段...
总之,`jackson-core-asl-1.9.8.jar`和`jackson-mapper-asl-1.9.8.jar`是Jackson库的旧版组件,它们在Spring MVC中与`@ResponseBody`和`<mvc:annotation-driven />`结合使用,提供了JSON数据的自动序列化和反序列化...
Jackson Data Bind模块,即Jackson ObjectMapper,是其最常用的部分,它提供了简单易用的API来实现Java对象与JSON之间的映射。例如,你可以使用`ObjectMapper.readTree()`方法将JSON字符串转换为JsonNode树形结构,...
3. `fasterxml.jackson.annotation`:包含了一系列的注解,用于定制序列化和反序列化的行为。 ### 序列化:Object到Json 序列化是指将Java对象转换为JSON字符串的过程。Jackson提供了`ObjectMapper`类来实现这一...
在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...
它可以将Java对象直接映射到JSON,反之亦然,使得JSON数据和Java POJO(Plain Old Java Object)之间的转换变得简单。`ObjectMapper`类是这个模块的核心,负责执行实际的转换操作。 3. **jackson-anno**:即Jackson...
- Struts2的JSON插件提供了一种简单的方式来序列化和反序列化Java对象到JSON格式,无需额外的库如Gson或Jackson。 - 要启用JSON插件,首先需要在struts.xml配置文件中引入依赖,或者在pom.xml中添加相应的Maven...
jackson 使用了 Java 语言的Annotation 机制,来映射 JSON 数据和 Java 对象。 gson 是谷歌出品的 JSON 解析器,具有高性能和高可扩展性的特点。gson 使用了 Java 语言的反射机制,来映射 JSON 数据和 Java 对象。 ...
2. 在Spring的配置文件中,使用`<mvc:annotation-driven>` 配置元素启用基于注解的控制器支持,Spring会自动检测并使用Jackson库进行JSON转换。 使用示例: ```java import org.springframework.web.bind....
杰克逊(Jackson)是Java领域中广泛使用的JSON处理库,它的版本2.5.3在本资源包中包含了两个核心组件:`jackson-jr-objects-2.5.3.jar` 和 `jackson-core-2.5.3.jar`。 1. **Jackson-jr-objects-2.5.3.jar** 这个...
为了实现这一转换,Java开发者们经常使用Jackson这一功能强大的库。 ### 知识点一:什么是Jackson? Jackson是一个流行的Java库,专门用于处理JSON格式数据。它是以Java对象模型为基础,将Java对象序列化(转换为...