【问题标题】:Returning returned model object to json String using spring data jpa with hibernate使用带有休眠的spring数据jpa将返回的模型对象返回到json字符串
【发布时间】:2014-03-27 09:54:26
【问题描述】:

我正在使用带有休眠功能的 spring data jpa 这是我的dao接口

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

这是我的用户类

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" 
    }

spring data jpa 是否可以与休眠一起使用,这样我就不必在每个服务级别编写将 java 对象转换为 json 字符串的代码?

我正在使用spring,因此我想从spring实现它。

【问题讨论】:

  • JSON 有什么用?您是要为 HTTP 请求返回 JSON 还是出于其他目的?
  • 是的,用于返回 http 响应。但是,我的代码在 Web 服务代码之外。我正在从 prehandle 返回。我正在使用弹簧休息。从休息控制器返回时我没有问题.但是,当从 prehandle 返回时,我想从 prehandle 类调用 UserImplClass 时获取 json 字符串。
  • 目前还不清楚您要做什么。您想要在 Spring 消息转换器处理控制器返回值之前使用 JSON 吗?为什么?为什么不直接使用类型安全的对象,直到您需要序列化它们以通过网络传输?
  • @chrylis,我同意你的看法。这就是为什么我给他的答案分为两个选项。如果他使用第二个选项,那么他的应用程序的设计级别就有问题。仅应在通过 HTTP 返回数据之前进行到 JSON 的转换

标签: spring hibernate jpa spring-data


【解决方案1】:

你有两种选择来做你想做的事:

1) 如果您计划将此对象返回为 HTTP Response,并且您将 Spring MVCControllers 一起使用,您可以如下注释您的控制器方法:

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

2) 如果您希望 UserImplClass 本身返回一个 JSON 字符串(我不建议这样做,但我让您决定),您可以使用 Jackson Object Mapper 为您执行此操作(您可以注入它如果您在配置 xml 中将其声明为 bean,或者创建它的新实例,我个人更喜欢使用 @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);
}

【讨论】:

  • 但是,我必须为每项服务都这样做。
  • 如果您发现自己在使用第二个选项(我确实为您提供了一个可行的解决方案),我相信您的应用程序设计有问题。在普通应用程序中,服务层不必返回 JSON/任何其他表示级别的数据。它应该返回纯 Java 对象,并且 JSON 转换需要在您的 Controller 上进行。
猜你喜欢
  • 2018-02-25
  • 2014-09-23
  • 2016-12-12
  • 2020-02-11
  • 1970-01-01
  • 2022-01-19
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多