【发布时间】:2015-01-06 02:02:47
【问题描述】:
我有一个 spring-boot 1.1.7 应用程序,它在大部分 UI 中使用 Thymeleaf,所以我的控制器的响应并不是一个真正的问题。但是,现在我需要在用户通过 URL 提交请求时提供 XML 响应。
这是一个典型的请求:
http://localhost:9001/remote/search?sdnName=Victoria&address=123 Maple Ave
这是我的大部分 gradle 配置:
project.ext {
springBootVersion = '1.1.7.RELEASE'
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion")
compile("org.springframework.security:spring-security-web:4.0.0.M1")
compile("org.springframework.security:spring-security-config:4.0.0.M1")
compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity3:2.1.1.RELEASE')
compile("org.springframework.boot:spring-boot-starter-actuator")
compile('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.0')
}
这是我的控制器:
@Controller
public class RemoteSearchController {
@Autowired
private SdnSearchService sdnSearchService;
@RequestMapping(value = "/remote/search", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE)
public List<Sdn> search(@ModelAttribute SdnSearch sdnSearch) {
List<Sdn> foundSdns = sdnSearchService.find( sdnSearch );
return foundSdns;
}
这是我要返回的对象:
@Entity
public class Sdn {
@Id
private long entNum;
private String sdnName;
...
//getters & setters here
}
我能够通过 REST 客户端(例如 CocoaREST)接收请求并进行处理。但是当我返回 SDN 列表时,我得到以下异常,即使我的类路径上有 Jackson 和 jackson-dataformat-xml:
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:229)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:301)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:248)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:57)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:299)
我的 REST 客户端包含一个“text/xml”的接受标头(但老实说,我希望他们不必设置它。理想情况下,无论标头是否存在,对该控制器的任何调用都将始终获得 XML)。
有没有办法解决这个问题?我认为媒体转换器已包含在内,只是返回了控制器告诉他们的任何内容?
解决方案: 请参阅下面的我发布的答案。
【问题讨论】:
-
请将您的解决方案作为答案单独发布并接受。不在问题中。它使读者感到困惑