例如我有json看起来像:
<td style="background-color: # plain text, matches if exact
\s* # matches zero or more (*) space characters (\s)
# # plain text, matches exactly one '#'
( # start of a group, doesn't match anything
80F9CC # matches '80F9CC'
|E1E3E4 # or (|) 'E1E3E4'
|D1D3D4 # or 'D1D3D4'
|73F6AB # or ...
|3CEB88 # or ...
) # end of the group
;"> # plain text; matches exactly this text
例如,我有对象User with field name。
是否有可能将数据数组解析为对象User的写方法?
类似
{
"data": [
{
"name": "one"
},
{
"name": "two"
}
]
}
现在要做到这一点,我需要创建一个像
这样的包装类Call<List<User>> getUsers(@KeyPath("data"))
在服务中我做下一步
public class UsersWrapper {
@SerializeName("data")
public ArrayList<User> users;
}
但我的所有请求只是对数据的响应,而是数组中的变量对象。
在这种情况下,我需要为任何数据请求创建包装器。痛苦:(
答案 0 :(得分:2)
我这样做:
全局类@Repository("prestitolibroDao")
public class PrestitoLibroDaoImpl extends AbstractDao<Integer, PrestitoLibro> implements PrestitoLibroDao{
public PrestitoLibro findById(int id) {
PrestitoLibro prestitolibro = getByKey(id);
if(prestitolibro!=null){
Hibernate.initialize(prestitolibro.getId());
}
return prestitolibro;
}
public void savePrestitoLibro(PrestitoLibro prestitolibro) {
persist(prestitolibro);
}
public void deletePrestitoLibroById(int id) {
Query query = getSession().createSQLQuery("delete from Prestitolibro where id = :id");
query.setString("id",(String) Integer.toString(id));
query.executeUpdate();
}
@SuppressWarnings("unchecked")
public List<PrestitoLibro> findAllPrestitiLibro() {
Criteria criteria = createEntityCriteria();
return (List<PrestitoLibro>) criteria.list();
}
@SuppressWarnings("unchecked")
public List<PrestitoLibro> findAllPrestitiLibroByPrestito(int prestitoId) {
Criteria criteria = createEntityCriteria();
criteria.add(Restrictions.eq("id_prestito", prestitoId));
return (List<PrestitoLibro>) criteria.list();
}
@SuppressWarnings("unchecked")
public List<PrestitoLibro> findAllPrestitiLibroByLibro(int libroId) {
Criteria criteria = createEntityCriteria();
criteria.add(Restrictions.eq("id_libro", libroId));
return (List<PrestitoLibro>) criteria.list();
}
@Repository("prestitoDao")
public class PrestitoDaoImpl extends AbstractDao<Integer, Prestito> implements PrestitoDao{
public Prestito findById(int id) {
Prestito prestito = getByKey(id);
if(prestito!=null){
Hibernate.initialize(prestito.getId());
}
return prestito;
}
public void savePrestito(Prestito prestito) {
persist(prestito);
// Save prestito significa salvare il prestito o/e anche PrestitoLibiri
}
public void deletePrestitoBySss(String sss) {
Query query = getSession().createSQLQuery("delete from Libro where snn = :snn");
query.setString("sss", sss);
query.executeUpdate();
}
@SuppressWarnings("unchecked")
public List<Prestito> findAllPrestiti() {
Criteria criteria = createEntityCriteria();
return (List<Prestito>) criteria.list();
}
public Prestito findPrestitoBySss(String sss) {
System.out.println("SSS : "+sss);
Criteria criteria = createEntityCriteria();
criteria.add(Restrictions.eq("sss", sss));
Prestito prestito = (Prestito)criteria.uniqueResult();
if(prestito!=null){
Hibernate.initialize(prestito.getId());
}
return prestito;
}
来解析整个JSON
Wrapper<T>
并public class Wrapper<T> {
public List<T> data;
}
解析实际数组;
User
然后,API接口:
public class User {
public String name;
}
在@GET("/people")
Wrapper<User> getUsers();
课程中,只需执行以下操作:
DataSource
<强> Upd1:强>
另一个解决方案是为@Override
public List<User> getUsers() {
Wrapper<User> usersWrapper = myApiInterface.getUsers();
return usersWrapper.data;
}
类型创建自定义JsonDeserializer
(如所描述的here),通过List<User>
向您的自定义registerTypeAdapter
对象注册,然后您可以反序列化你的Json直接进入Gson
。虽然,这个解决方案带来了更多额外的代码,但我不清楚潜在的好处。