我有一个json喜欢
"weatherInfo":{ "city":"北京", "publishDate":"2014年3月4日", "week":"星期二", "tempRange":"8℃~-3℃", "feelTemp":"10", "time":"16:05", "temp":"11", "WD":"北风", "WS":"2级", "SD":"27%", "weather1":"晴" }
我的班级是
public class WeatherVO implements Serializable{
private static final long serialVersionUID = 2348480036959754071L;
@JsonProperty(value="weatherinfo")
private WeatherInfoVO weatherInfoVO;
@JsonIgnoreProperties(ignoreUnknown=true)
public class WeatherInfoVO{
//城市
@JsonProperty(value="city")
private String city;
//发布日期
private String publishDate;
//发布时间
@JsonProperty(value="time")
private String publishTime;
//星期
private String week;
//温度范围
private String tempRange;
//当前时刻温度
@JsonProperty(value="temp")
private String currentTemp;
//风向
@JsonProperty(value="WD")
private String windDirection;
//风力
@JsonProperty(value="WS")
private String windForce;
//当前时刻湿度
@JsonProperty(value="SD")
private String currentHumidity;
//体感温度
private String feelTemp;
//天气描述
private String weatherDesc;
}
}
我想将json转换为对象,如:
WeatherVO weatherVO = objectMapper.readValue (jsonString, WeatherVO.class);
我希望返回json使用org.springframework.http.converter.json.MappingJacksonHttpMessageConverter类 并且返回json是
“weatherInfo”:{ “城市”: “北京”, “publishDate”: “2014年3月4日”, “周刊”: “星期二”, “tempRange”: “8℃〜-3℃”, “feelTemp”: “10”, “时间”: “16:05”, “温度”: “11”, “WD”: “北风”, “WS”: “2级”, “SD”: “27%”,
“weather1”: “晴” }
但我希望像
一样回归“weatherInfo”:{ “城市”: “北京”, “publishDate”: “2014年3月4日”, “周刊”: “星期二”, “tempRange”: “8℃〜-3℃”, “feelTemp”: “10”, “publishTime”: “16:05”, “currentTemp”: “11”, “windDirection”: “北风”, “WINDFORCE”: “2级”, “currentHumidity”: “27%”,
“天气”: “晴” }
我该怎么做? 感谢您的任何建议和帮助。
答案 0 :(得分:0)
你可以通过@JsonIgnore标记字段的getter然后创建另一个获取字段并将其标记为@JsonProperty的方法来实现。
我的建议是首先重命名你的字段以避免混淆。我把它重命名为你拥有的json。所以举个例子。
public class WeatherInfoVO{
private String city;
private String publishDate;
private String week;
private String tempRange;
private String feelTemp;
private String time;
private String temp;
private String WD;
private String WS;
private String SD;
private String weather1;
//getters and setters
}
然后在你的setters方法中标记相应的@JsonProperty。
@JsonProperty(value="time")
public void setTime(String time) {
this.temp = temp;
}
@JsonProperty(value="temp")
public void setTemp(String temp) {
this.temp = temp;
}
@JsonProperty(value="WD")
public void setWD(String WD) {
this.WD = WD;
}
@JsonProperty(value="WS")
public void setWS(String WS) {
this.WS = WS;
}
@JsonProperty(value="SD")
public void setSD(String SD) {
this.SD = SD;
}
@JsonProperty(value="weather1")
public void setWeather1(String weather1) {
this.weather1 = weather1;
}
//other setters here
并且在getter中,确保将@JsonIgnore添加到要重命名的字段中。由于您将其声明为@JsonIgnore,因此需要创建另一个getter并将其标记为@JsonProperty。只对您要重命名的字段执行此操作,在您的情况下,字段仅为时间,临时,WD,WS,SD和weather1。这是一个例子。
@JsonIgnore
public void getTime(){
return time;
}
@JsonProperty(value="publishTime")
public void getPublishTime(){
return time;
}
@JsonIgnore
public void getTemp(){
return temp;
}
@JsonProperty(value="currentTemp")
public void getCurrentTemp(){
return temp;
}
@JsonIgnore
public void getWD(){
return WD;
}
@JsonProperty(value="windDirection")
public void getWindDirection(){
return WD;
}
@JsonIgnore
public void getWS(){
return WS;
}
@JsonProperty(value="windForce")
public void getWindForce(){
return WS;
}
@JsonIgnore
public void getSD(){
return SD;
}
@JsonProperty(value="currentHumidity")
public void getCurrentHumidity(){
return SD;
}
@JsonIgnore
public void getWeather1(){
return weather1;
}
@JsonProperty(value="weather")
public void getWeather(){
return weather1;
}