java jpa json标准

时间:2018-03-26 03:15:24

标签: java json jpa jsend

首先,非常感谢你阅读这个问题。

我有一个JPA项目,一切正常,我用控制器得到的json就是这样:

{"id": 1, "name": "Canada"},{"id": 2, "name": "USA"}

一切都很好,但我希望得到一个Jsend标准的json,它是这样的:

{
status : "success",
data : {
    "country" : [
        {"id": 1, "name": "Canada"},
        {"id": 2, "name": "USA"}
    ]
  }
}

{
  "status" : "fail",
  "data" : { "title" : "A title is required" }
}

{
 "status" : "error",
 "message" : "Unable to communicate with database"
}

如您所见,我希望获得成功,失败或错误的状态: 但我不知道该怎么做。这是我的DTO,DAO和控制器

@Entity
public class Country implements Serializable {

private static final long serialVersionUID = -7256468460105939L;

@Id
@Column(name="id")
private int id;

@Column(name="name")
private String name;

//Constructor, get and set 

DAO

@Repository
@Transactional
public class CountryRepository {

  @PersistenceContext
  EntityManager entityManager;

  public CountryDTO findById(int id) {
      return entityManager.find(CountryDTO.class, id);
  }
}

控制器

@RestController
public class CountryController {

    @Autowired
    CountryDTO repository;

    @RequestMapping(value="api/country/{id}", method=RequestMethod.GET)
    public @ResponseBody CountryDTO getByID(@PathVariable("id") int id){
        return repository.findById(id);
    }
}

再次感谢您的时间。

1 个答案:

答案 0 :(得分:-1)

从我的角度来看,这是一个非常好的问题。所以我可以给出行动项目清单来实现这一目标。

  1. 您应该知道Spring中提供的@ControllerAdvice注释。
  2. 利用它,您可以使用您的响应对象。
  3. 然后您应该创建自己的对象,类似于JSend。就我而言,我创建了JSendMessage

    public class JSendMessage {
        String status;
        String message;
        Object data;
        // Add getter and setter
    }
    
  4. 现在,您应该在您的@ControllerAdvice上方的地图上方找回您所需的对象。

  5. 因此,只要有异常,您就可以创建并发送自己的自定义异常消息。 对此有很多参考。只需查看@ControllerAdvice
  6. 即可