通过阅读这些和其他资料,我发现实现我想要的最干净的方法是使用Spring 3.1和可以在mvc-annotation中配置的消息转换器。我更新的spring配置文件是:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<context:component-scan base-package="com.mkyong.common.controller" />
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="prefixJson" value="true" />
<property name="supportedMediaTypes" value="application/json" />
<property name="objectMapper">
<bean class="org.codehaus.jackson.map.ObjectMapper">
<property name="serializationInclusion" value="NON_NULL"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
服务类与mkyong.com网站上提供的服务类相同,只不过我注释掉了商店名称变量的设置,因此它为null,即
@Controller
@RequestMapping("/kfc/brands")
public class JSONController {
@RequestMapping(value="{name}", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody Shop getShopInJSON(@PathVariable String name) {
Shop shop = new Shop();
//shop.setName(name);
shop.setStaffName(new String[]{name, "cronin"});
return shop;
}
}
我正在使用的Jacksonjar是jackson-mapper-asl 1.9.0和jackson-core-asl 1.9.0。这些是我从mkyong.com下载的spring-json项目的一部分,是我添加到pom中的唯一新罐。
该项目成功构建,但是当我通过浏览器调用服务时,仍然得到相同的结果,即{“ name”:null,“ staffName”:[“ kfc-kampar”,“ smith”]}
谁能告诉我我的配置哪里出问题了?
我尝试了其他几种选择,但是我能够以正确格式返回json的唯一方法是将Object映射器添加到JSONController并让“ getShopInJSON”方法返回一个字符串,即
public @ResponseBody String getShopInJSON(@PathVariable String name) throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
Shop shop = new Shop();
//shop.setName(name);
shop.setStaffName(new String[]{name, "cronin"});
String test = mapper.writeValueAsString(shop);
return test;
}
现在,如果我调用该服务,则会得到预期的结果,即{“ staffName”:[“ kfc-kampar”,“ cronin”]}
我还可以使用@JsonIgnore批注使其正常工作,但是该解决方案不适合我。
我不明白为什么它可以在代码中工作,但不能在配置中工作,所以任何帮助都是很棒的。
从Jackson 2.0开始,你可以使用JsonInclude
@JsonInclude(Include.NON_NULL)
public class Shop {
//...
}
我有一个返回json响应的spring webservice。我使用这里给出的示例创建服务:http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/ 返回json的格式为:{“name”:null,“staffname”:[“kfc-kampar”,“smith”]} 我想从返回的响应中删除任何空对象,因此它看起来如下所示:{“
问题内容: 在.NET Core 1.0(所有API响应)的全局级别上,如何配置Startup.cs,以便在JSON响应中删除/忽略空字段? 使用Newtonsoft.Json,您可以将以下属性应用于属性,但我希望避免将其添加到每个属性中: 问题答案: [.NET Core 1.0] 在Startup.cs中,可以将JsonOptions附加到服务集合,并在其中设置各种配置,包括删除空值: [.N
下面是一个json响应的示例。正如您所看到的,像:news、number_likes、number_comment、number_post、user和owner这样的字段总是存在。但是像:place、place_mark、comment、album、photo这样的字段并不总是存在。这取决于新闻的类型。 请帮帮我!为了正确的json反序列化,我需要做什么?也许有人有经验,在编写自定义转炉工厂或可以
如何从Jackson在中生成的json响应中排除所有空json对象、数组或空对象的数组? 我正在为一个客户端构建一个Spring Boot REST API。API向数据库发送请求,并且必须生成JSON响应。 DAO层发送本机SQL查询,并以列表形式接收巨大的DB结果。开发人员必须使用索引手动将此结果映射到Java对象(参见下面的代码) SQL查询返回大量空值(这些查询不能修改)。由于这些空值,只
我有简单的asmx返回JSON: C#类定义: 使用jquery$调用。ajax: 我的JSON响应(带有不需要的空值): {“PropertyA”:“1”,“PropertyB”:null,“PropertyC”:“1”,“PropertyD”:null} 问:如何仅使用JSON中的非空属性,尽可能多地使用我已经拥有的内容? 我在这里看到了一些答案,人们返回JSON对象和用JSON属性定义的属性
我想删除MVC中的http响应头。 HTTP/1.1 404找不到缓存-控件:私有内容-类型:text/html;charst=UTF-8服务器:Microsoft-IIS/8.0X-Powered-by:ASP.NET日期:Mon,23 Feb 2015 12:43:58 GMT内容-长度:4898连接:Keep-Alive 我使用以下代码删除连接、X-Powered-By、Server、Cac