当前位置: 首页 > 知识库问答 >
问题:

Spring Rest模板发送JsonArray

施子民
2023-03-14

我使用spring rest模板作为请求发送json数组。发送请求的源代码如下:

JSONArray jsonArray = new JSONArray();

for (Iterator iterator = itemlist.iterator(); iterator.hasNext();) {

    Item item = (Item)iterator.next();

    JSONObject formDetailsJson = new JSONObject();

    formDetailsJson.put("id", item.getItemConfId());
    formDetailsJson.put("name", item.getItems().getItemName());
    formDetailsJson.put("price", item.getPrice());
    formDetailsJson.put("Cost",item.getCost());

    jsonArray.put(formDetailsJson);
}


List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_JSON);

// Prepare header
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
// Pass the new person and header
HttpEntity<JSONArray> entity = new HttpEntity<JSONArray>(jsonArray, headers);

System.out.println("Json Object : "+entity);
// Send the request as POST
try {
    ResponseEntity<String> result = restTemplate.exchange("my url", HttpMethod.POST, entity, String.class);

} catch (Exception e) {
    logger.error(e);

    return "Connection not avilable please try again";
}

并接受请求:

@RequestMapping(value = "/testStock", method = RequestMethod.POST,headers="Accept=application/xml, application/json")
    public @ResponseBody int testStock(@RequestBody List<ItemList>  jsonArray) {

        logger.debug("Received request to connect ms access : "+jsonArray.size());

        //int returnSizecount = stockList.getStocklst().size();

        return 1;
    }

问题是它给了我以下错误:无法写入请求:找不到适合请求类型[org.json.JSONArray]的HttpMessageConverter。任何建议都是可以接受的。

共有3个答案

解河
2023-03-14

错误很简单。您没有用于JSONArray的转换器。将数组转换为字符串(使用toString)确实对您有所帮助,但有一种更好的方法:

只需为json.org对象添加一个转换器:

将此添加到您的pom.xml

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-json-org</artifactId>
    </dependency>

然后在ObjectMapper上添加JsonOrgModule:

mapper.registerModule(new JsonOrgModule());
苗承
2023-03-14

你需要有httpMessagConverter配置为您的rest模板,请阅读我的文章为您配置超文本传输协议消息转换器webservice

http://stackoverflow.com/questions/19963127/new-to-spring-and-jackson-2-what-does-this-bean-declaration-allow-for-in-a-spri/19973636#19973636.

对于您将超文本传输协议请求转换为json的问题,您可以在restemboard配置中添加此条目

 <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
董宜然
2023-03-14

JSONArray没有MessageConverter,因此我建议执行以下操作。

HttpEntity<JSONArray> entity = new HttpEntity<JSONArray>(jsonArray, headers);

将类JSONArray转换为String,并将其添加到HttpEntity,您知道使用toString

java.lang.字符串

      Make a JSON text of this JSONArray.

HttpEntity实体=new HttpEntity(jsonArray.toString(),标头);

或者改变Jackson实现,Spring对此有支持。除息的

如果您不想执行上述操作,请考虑创建自己的messageConverter实现,这将很有效,但难度更大

更新

HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
headers.setContentType(MediaType.APPLICATION_JSON);

更新2将endpoint更改为。

@RequestMapping(value = "/testStock", method = RequestMethod.POST)
    public @ResponseBody int testStock(@RequestBody String  jsonArray) {
 类似资料:
  • 我正在尝试使用spring应用程序的Thymeleaf模板发送邮件,我在这里引用https://github.com/Thymeleaf/thymeleafexamples-springmail/ 我没有得到任何错误,但它仍然不工作...我使用相同的代码给在github仍然没有运气...谁能建议如何做到这一点?? 下面是用来发送邮件的方法。 如果我删除使用thymeleaf创建html正文的行,并

  • 模板消息使用规范 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如活动报名成功通知、审核结果通知、业务流转通知等; 不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息; 使用模板消息群发功能请务必遵守 微信模板消息运营规范 1. 手动发送模板消息 1)在活动、直播和会议的参与人员或参会人员列表,选择需要发送通知的活动报名用户发送通知: 2)在消息通知窗口的发

  • 我正在尝试使用spring rest模板POST w/自定义拦截器将一个大文件从一个微服务发布到另一个微服务,如下所示: (我是否使用SimpleClientHttpask estFactory或HttpComponentsClientHttpask estFactory没有区别) 添加拦截器会在调用getRequestFactory时创建一个新的侦听ClientHttPrequestFactor

  • 我有两项服务-和<代码>服务1通过SpringREST模板调用一些API。现在

  • 我在用烧瓶做一个网站。它在top.html中使用sql显示一个列表,其中每个元素都是超文本。 所以我想知道从列表中点击了哪个超文本,这样我就可以在/text中加载它各自的内容。请同时提供python代码(flask代码)。