2014-03-27 171 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轉換。 –