我习惯了JAX-RS,并且希望在使用Spring MVC发送请求和处理响应时也有类似的舒适感,即在我的测试中的客户端。
在服务器(控制器)端,我对自动转换非常满意,也就是说,只返回一个对象实例并在发送给客户机的结果HTTP响应中包含JSON就足够了。
您能告诉我如何在这些代码片段中将<code>objectInstance
String jsonStringRequest = objectMapper.writeValueAsString(objectInstance);
ResultActions resultActions = mockMvc.perform(post(PATH)
.contentType(MediaType.APPLICATION_JSON)
.content(jsonStringRequest)
)
String jsonStringResponse = resultActions.andReturn().getResponse().getContentAsString();
Some objectInstanceResponse = objectMapper.readValue(jsonStringResponse, Some.class);
为了比较,使用JAX-RS客户端API,我可以使用<code>request.post(Entity.Entity(objectInstance,MediaType.APPLICATION_JSON_TYPE)response.readEntity(Some.class)读取响应
如果您有很多响应对象,您可以创建一些通用的JsonToObject映射器工厂。然后,它可以用于从泛型响应(所有响应对象继承自同一泛型类)中检测对象类型,并从错误的映射尝试中正确响应/记录。
我手头没有代码示例,但作为伪代码:
public abstract GenericResponse {
public String responseClassName = null;
// get/set
}
在服务器代码中,将实际响应对象的名称添加到此类。
JsonToObject工厂
public ConverterFactory<T> {
private T objectType;
public ConverterFactory(T type) {
objectType = type;
}
public T convert(String jsonString) {
// Type check
GenericResponse genResp = mapper.readValue(result.getResponse().getContentAsString(),
GenericResponse.class);
if (objectType.getClass().getSimpleName().equals(genResp.getResponseClassName())) {
// ObjectMapper code
return mapper.readValue(result.getResponse().getContentAsString(),
objectType.class);
} else {
// Error handling
}
}
}
我认为这可以扩展到和注释一起使用,在响应上做更多的自动化魔术。(开始用BeanPostProcessor检查)
@Component
public class AnnotationWorker implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(final Object bean, String name) throws BeansException {
ReflectionUtils.doWithFields(bean.getClass(), field -> {
// make the field accessible if defined private
ReflectionUtils.makeAccessible(field);
if (field.getAnnotation(MyAnnotation.class) != null) {
field.set(bean, log);
}
});
return bean;
}
}
上面的代码片段是从我当前的项目中复制的,它注入到字段中,你需要修改它,使它适用于方法,例如...你可能需要它的地方。
实现这一切可能很棘手,甚至不能说它一定有效,但如果你不介意一点教育工作,这是可以尝试的。
问题内容: 我有一个JSON对象,我将其转换为并在此处进行一些处理。稍后,我想转换相同的缓冲区数据以转换为有效的JSON对象。 我正在研究Node V6.9.1 下面是我尝试过的代码,但是当我转换回JSON却无法打开该对象时遇到了。 所以我尝试使用检查方式打印整个对象 如果我尝试像数组一样读取它 我也尝试解析它抛出 我需要将其视为我创建的真实对象(我的意思是像上面声明的那样)。 请帮忙.. 问题答
我正试图将下面的json转换成java bean,需要你的帮助 Sort.json 我的豆子看起来像 我的测试课是 我看到的错误是 请建议:
我有一个带有对象的数组()。对象包含一个 orgId 和一个 orgName。 有没有一种简便的方法可以将它转换成< code>Map[Long,String] (orgId,orgName)
例如:Date值为:“dateCollected”:fri Jul 07 00:00:00 IST 1989, 但它只服用星期五而不是整个日期。
问题内容: 我正在将struts2用于Action,将jquery用于UI … 我想知道如何将Map对象转换为JSON对象并将其发送回UI, 现在可以在JSP页面中将其打印为普通的Java Map对象: 但我希望它是这样的: 我将如何实现这一目标…? 问题答案: 尝试Gson: 不过,我不建议将这种代码放入JSP。诸如此类的事情应该存在于Servlet或Action类之类的控制器中。 您还绝对不希
问题内容: 我对服务进行了调用,并将响应存储在中。但是,我试图将其转换为类对象并得到错误。这是我的代码: 响应如下所示: 这是该类的样子: 但是我得到了错误: 我究竟做错了什么? 编辑1: 这是从答案中使用gson的尝试: 但是我得到了错误: 问题答案: 找出问题所在。需要提取jsonobject而不是获取字符串。这是解决此问题的行: