我设置了一个类来返回定制的ObjectMapper。据我所知,让spring boot使用这个ObjectMapper的正确方法是将它声明为@primary,它就是这样。
@Configuration
public class MyJacksonConfiguration {
@Bean
@Primary
public ObjectMapper objectMapper() {
return Jackson2ObjectMapperBuilder
.json()
.findModulesViaServiceLoader(true)
.mixIn(Throwable.class, ThrowableMixin.class)
.featuresToDisable(
WRITE_DATES_AS_TIMESTAMPS)
.serializationInclusion(
Include.NON_ABSENT)
.build();
}
}
但是,当我从controller方法返回一个对象时,它将使用默认的jackson ObjectMapper配置序列化。
如果我向我的控制器中添加一个显式的ObjectMapper并对其调用writeValueAsString,我可以看到这个ObjectMapper是我希望spring boot使用的定制的ObjectMapper。
@RestController
public class TestController {
@Autowired
private TestService service;
@Autowired
private ObjectMapper mapper;
@GetMapping(value = "/test", produces = "application/json")
public TestResult getResult() {
final TestResult ret = service.getResult();
String test = "";
try {
test = mapper.writeValueAsString(ret);
// test now contains the value I'd like returned by the controller!
} catch (final JsonProcessingException e) {
e.printStackTrace();
}
return ret;
}
}
当我在控制器上运行测试时,test类还使用autowired ObjectMapper。同样,提供给测试的ObjectMapper是定制的。
所以spring在一定程度上了解定制的ObjectMapper,但我的rest控制器类没有使用它。
我试过为spring打开调试日志,但在日志中看不到任何有用的东西。
你知道会发生什么吗,或者我应该去哪里寻找这个问题?
编辑:似乎有多种方法可以这样做,但是我尝试这样做的方法似乎是一种推荐的方法,我希望它以这种方式工作--参见https://docs.spring.io/spring-boot/docs/1.4.7的71.3。release/reference/html/howto--mvc.html#howto-customize-the--objectmapper--我是不是误解了什么?
spring使用HttpMessageConverters呈现@ResponseBody(或来自@RestController的响应)。我认为您需要重写HttpMessageConverter。您可以通过扩展webmvcconfigureradapter
并重写以下内容来实现。
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
messageConverters.add(new MappingJackson2HttpMessageConverter());
super.configureMessageConverters(converters);
}
spring文件
虽然其他答案显示了实现相同结果的替代方法,但这个问题的实际答案是,我定义了一个单独的类,它扩展了WebMVCConfigurationSupport
。通过这样做,WebMVCautoConfiguration
bean被禁用,因此@primary ObjectMapper没有被spring获取。(在WebMVCautoConfiguration
源代码中查找@conditionalonmissingBean(WebMVCConfigurationSupport.class)
)
临时删除扩展WebMVCConfigurationSupport
的类允许按照spring的预期拾取和使用@primary
ObjectMapper
。
由于我无法永久删除WebMVCConfigurationSupport
扩展类,因此我向其添加了以下内容:
@Autowired
private ObjectMapper mapper;
@Override
public void configureMessageConverters(final List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJackson2HttpMessageConverter(mapper));
addDefaultHttpMessageConverters(converters);
super.configureMessageConverters(converters);
}
返回文件的URL。 starfxdemodoc.fxml为: 而StarfXDemodocController.java是这样的: 有谁能帮我一下吗? 编辑/更新: 根据james_d的评论(谢谢你James,显然我已经盯着这个问题太久了……),我修复了控制器中的明显错误,并将SimNameField设置为TextField,而不是Label(并更新了上面的代码块以反映这一点)。我还将异常处理更改
问题内容: 我正在Unix环境的Advanced Programming中尝试此程序。 我正在使用Ubuntu 11.10。我用gcc编译程序,然后按照书中的说明运行a.out。 $。/ a.out&[1] + 1345 $ kill -USR1 1345 但是没有输出输出。该程序一直在后台运行,我必须杀死它。 我尝试过的其他方法: 尝试处理SIGINT以查看在后台运行程序是否引起问题。仍然没有输
在使用Springboot创建API以及理解bean的工作方式方面有点困难。 我有三门课,我尽可能简化了它们; 我的问题是,在控制器中,我没有从创建的ClassA对象myClass中获取neededVar,实际上我不确定我得到了什么。 我也尝试过这样做,得到了类似的结果。 如果有人能为我指出正确的方向,将neededVar从应用程序中的实例化ClassA中获取到我的rest控制器(以及随后我将创建
我需要我的Node REST API进行版本控制。我正在使用swagger 2.0作为验证中间件和文档。目前,我只有一个用于所有目的的swagger yml文件。 我使用url前缀(版本号:/v1/../v2/…等)来支持节点Rest API中的版本控制。我需要在任何时候支持多个版本。 我应该为每个API版本创建一个单独的swagger yml文件吗?如果是,如何在 swagger 验证中间件中加
我有一个spring-boot应用程序,没有任何控制器类。如何为该应用程序编写异常处理程序。用@ControllerAdvice注释的异常处理程序类不起作用。
我正在尝试验证Json Objects。我使用https://code.google.com/p/rest-assured/wiki/Downloads?tm=2, greeter-schema.json:http://cs606926.vk.me/v606926718/15603/0Kauo1bTDi8.jpg 即使JsonString不等于这个“{\”isSuccess\“:false}”,我