2014-03-27 47 views
0

我使用的弹簧数据的JPA与Hibernate 返回返回模型对象JSON字符串这是我的DAO接口使用弹簧数据的JPA与Hibernate

@Repository 
public interface IUserDAO extends JpaRepository<User, Integer>{ 
    User findByUsername(final String username); 
} 

这是我的User类

Entity 
@Table(name="USER") 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="ID", nullable = false) 
    private int id; 

    @Column(name="USERNAME", nullable = false) 
    private String username; 

    @Column(name="NAME", nullable = false) 
    private String name; 

    public int getId() { 
    return id; 
    } 

    public void setId(int id) { 
    this.id = id; 
    } 

    public String getUsername() { 
    return username; 
    } 

    public void setUsername(String username) { 
    this.username = username; 
    } 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

} 

这是我的UserImplClass

This is my UserImplClass{ 
@Autowired 
    private IUserDAO iUserDAO; 

public String findUserByUserName(String username) { 

     User user =iUserDAO.findByUsername(username); 
     Convert user to json object from framework level automatically 
     // i can add my one implemenation of converting user to json here ,but i want to achieve it from framework so that my code is not scattered on every service level 
     return "jsonStringOfUserObject" 
    } 

是否有可能使用hibernate的spring数据jpa,以便我不必在每个服务级别编写用于将java对象转换为json字符串的代码?

我使用弹簧,因此我想从春天实现它。

+0

JSON是为了什么?您是否在为HTTP请求或其他目的返回JSON? – chrylis

+0

是的,用于返回http响应。但是,我的情况下的代码是在web服务代码之外。我从预处理返回。我使用spring rest.When从休息控制器返回时我没有问题。但是,从预处理返回时,我想从预处理类调用UserImplClass时获取json字符串。 –

+0

你很难清楚你想要做什么。在Spring消息转换器处理控制器返回值之前,你想要JSON吗?为什么?为什么不直接使用类型安全的对象,直到需要序列化它们以通过网络传输? – chrylis

回答

3

你有两个选择,做你想做什么:

1)如果您打算在返回这个对象作为一个HTTP Response,并使用Spring MVC的控制器您可以注解控制器方法如下:

public @ResponseBody User getUser(){ 
    return userImplClass.findUserByUserName("yourusername"); 
} 

2)如果你希望UserImplClass本身返回一个JSON字符串(我do't建议,但是我离开你的决定),你可以使用杰克逊对象映射到为你做它(您可以注入,如果你宣布它作为一个bean您的配置XML,或创建一个新的实例,我个人更喜欢用@Autowired其注入)

public String findUserByUserName(String username) { 

    User user =iUserDAO.findByUsername(username); 


    ObjectMapper mapper = new ObjectMapper(); // no need to do this if you inject via @Autowired 


    return mapper.writeValueAsString(user); 
} 
+0

但是,我必须为每项服务都执行此操作。 –

+2

如果您发现自己使用第二个选项(我确实给了您一个工作解决方案),我相信您的应用程序设计有些问题。在正常的应用程序中,服务层不必返回JSON /任何其他表示级别的数据。它应该返回普通的Java对象,并且需要在Controller上进行JSON转换。 –