我有以下方法,每当查询字符串中出现xml参数时,我想返回xml,否则返回json。
@RequestMapping(value="/flight/{number}")
public ResponseEntity getFlight(@PathVariable("number") String number,
@RequestParam(value="xml",required = false) String xml) {
try {
if(flightservice.getFlight(number) != null) {
if(xml != null) {
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.APPLICATION_XML);
return new ResponseEntity(buildFlightResponse(flightservice.getFlight(number)), responseHeaders, HttpStatus.OK);
} else {
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity(buildFlightResponse(flightservice.getFlight(number)), HttpStatus.OK);
}
} else {
return new ResponseEntity(getErrorResponse("404", "Flight with number "+number+" not found"), HttpStatus.NOT_FOUND);
}
} catch(Exception ex) {
return new ResponseEntity(getErrorResponse("400", ex.getMessage()), HttpStatus.BAD_REQUEST);
}
}
我已在我的spring boot配置类中将defaultContentType设置为MediaType.APPLICATION_JSON。 问题出在xml部分,即使我将responseHeaders contentType设置为APPLICATION_XML,我也会得到格式不正确的json响应。
有没有办法可以使用if .. else条件返回xml或json。
答案 0 :(得分:0)
您可能需要在ResponseEntity中返回一个Jaxb对象。当Jaxb出现在classpath中时,spring配置了一个Jaxb HttpMessageConverter。
因此当你返回像
这样的Jaxb对象时@XmlRootElement
public class MyResponse {
}
Spring将其转换为xml并写为响应。 写两个Class作为你的响应,一个作为Jaxb,一个作为jackson来构建构建并相应地返回ResponseEntity。