Java Jackson对象映射器在响应中包含转义序列

Java Jackson对象映射器在响应中包含转义序列,java,json,spring,jackson,Java,Json,Spring,Jackson,当我使用对象映射器时,它会在响应中引入\r\n。请帮助我如何解决它。 我有一个trainpojo,它有字符串名和字符串值。 我将名称设置为“Sydney”,值设置为“SYD”。它会重新运行 {\ \ \"name \" : \"Sydney\",\ \ \"Value \" : \"SYD\",\ \ \"isEnable\" : false,\ \ \"isCurrent\" : false\ \ }" 浏览器中的原始值 "{\r\n \"name\" : \"Sydney\",\r\n

当我使用对象映射器时,它会在响应中引入\r\n。请帮助我如何解决它。 我有一个trainpojo,它有字符串名和字符串值。 我将名称设置为“Sydney”,值设置为“SYD”。它会重新运行

{\ \ \"name \" : \"Sydney\",\ \ \"Value \" : \"SYD\",\ \ \"isEnable\" : false,\ \ \"isCurrent\" : false\ \ }"
浏览器中的原始值

"{\r\n  \"name\" : \"Sydney\",\r\n  \"name\" : \"SYD\",\r\n  \"isEnable\" : false,\r\n  \"isCurrent\" : false\r\n}"
下面是我的代码 训练

控制器校准

public ResponseEntity<String> getDetails(   )       
            throws IOException {
        ResponseEntity<String> responseEntity = null;

        try(StringWriter writer = new StringWriter()) {
            ObjectMapper mapper = new ObjectMapper();           
            Train train = new Train();
          // set name and value to the train object//

             if(train != null)
             {
                mapper.setSerializationInclusion(Inclusion.NON_NULL);
                mapper.setSerializationInclusion(Inclusion.NON_EMPTY);

             mapper.writerWithDefaultPrettyPrinter().writeValue(writer,
                    train);         
            responseEntity = new ResponseEntity<>(writer.toString(),
                    HttpStatus.OK);
             }
             }
          catch()
             {}              
             return responseEntity;
             }
public ResponseEntity getDetails()
抛出IOException{
ResponseEntity ResponseEntity=null;
尝试(StringWriter=新建StringWriter()){
ObjectMapper mapper=新的ObjectMapper();
列车=新列车();
//设置列车对象的名称和值//
如果(列车!=null)
{
mapper.setSerializationInclusion(Inclusion.NON_NULL);
mapper.setSerializationInclusion(Inclusion.NON_EMPTY);
mapper.writerWithDefaultPrettyPrinter().writeValue(writer,
列车);
responseEntity=新的responseEntity(writer.toString(),
HttpStatus.OK);
}
}
捕获()
{}              
返回响应性;
}
配置:

@Override
    public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        converters.add(extendedJsonConvertor());
        super.configureMessageConverters(converters);
    }

    @Bean
    public MappingJackson2HttpMessageConverter extendedJsonConvertor() {
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();

        mappingJackson2HttpMessageConverter
                .setObjectMapper(getNullAndEmptyFilteredObjectMapper());
        return mappingJackson2HttpMessageConverter;
    }

    @Bean
    public ObjectMapper getNullAndEmptyFilteredObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();     
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
        objectMapper.configure(
                DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return objectMapper;
    }
@覆盖
公共无效配置MessageConverters(

列表问题在下面一行

mapper.writerWithDefaultPrettyPrinter().writeValue(writer,train);  
尝试将其替换为

mapper.writeValue(writer,train);
为什么在配置MappingJackson2HttpMessageConverter时要创建新的对象映射器?
您可以自动连接对象映射器或返回实际对象,并让spring将其转换为json,我认为这是一个“简单”的双重编码问题。您可以在响应实体中设置一个字符串,该字符串再次作为json响应写入

如果您希望依赖spring视图渲染(mappingjackson2httpmessageconverter),则必须为“Train”创建响应实体(或直接从控制器方法返回Train实例)


或者您使用您实现它的方式,并且您必须确保为json响应呈现字符串不会使用jackson消息转换器,而是spring不会触及它。

您使用的是spring mvc吗?是的,Haim。我也在配置文件中添加了configureMessageConverters,但相同的响应今天这个问题有6024个视图,我认为nk它应该得到很好的公认答案确保您使用的是MappingJackson2HttpMessageConverter。您的spring版本是什么确保您实际使用的是此代码(放置一个断点)。可能它在某个地方被重写。请尝试强制禁用映射器。禁用(SerializationFeature.INDENT\u输出);@Hamin我在配置类中定义了映射器,但我正在通过ObjectMapper mapper=new ObjectMapper()创建映射器的实例;是否会导致此问题我尝试自动连接对象映射器,但返回上下文初始化失败。因为我正在配置类中的配置消息转换器中调用这些对象映射器,所以我无法自动连接映射器。
mapper.writeValue(writer,train);