如何通过少量注解或代码修改将返回XML的Controller改为返回JSON
实现Spring接口从XML转JSON返回的最小代码修改方案
一、修改Controller的响应格式指定
仅需把@GetMapping注解里的produces属性值从XML类型替换为JSON类型:
修改后的Controller代码:
@GetMapping(value = "/check", produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<Result> getWapiResult(@RequestParam String sn){ return new ResponseEntity( wapiService.getWapiData(sn).getBody(), new HttpHeaders(), HttpStatus.OK); }
二、实体类添加JSON序列化支持
原实体类字段均为私有且无getter方法,Jackson默认无法序列化这些私有字段,添加一行Jackson注解即可解决,同时保留原有XML注解(二者不冲突):
修改后的Result实体类:
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) // 允许Jackson直接访问私有字段 public class Result { private boolean complete; private int srcsize; private String urlpath; }
如果项目已引入Lombok,也可以用@Data注解替代上述Jackson注解,它会自动生成getter/setter等方法,代码更简洁:
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @Data public class Result { private boolean complete; private int srcsize; private String urlpath; }
额外说明
- Spring Boot的web starter默认包含Jackson依赖,无需额外引入;传统Spring项目需手动添加
jackson-databind依赖。 - 若想让接口同时支持XML和JSON返回,可将
produces设为{MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE},客户端通过Accept请求头指定所需格式即可。
内容的提问来源于stack exchange,提问作者Mohit H
相关产品推荐
相关产品推荐

