2015-06-25 2 views
1

Я ищу использовать JACKSON вместо grails JSON, не меняя автомодельные контультеры.Как я могу заменить конвертер JSON на свой собственный

Можно ли легко заменить текущий конвертор JSON Grails на другой?

Существуют ли какие-либо классы для осуществления других, то AbstractConverter ...

ответ

0

должно быть довольно просто. AbstractConverter все, что вам нужно расширить, чтобы сделать:

render result as JackSON 

Что-то вроде этого ***: *** Взято отсюда: https://github.com/sjhorn/grails-jackson/blob/master/src/groovy/com/hornmicro/JackSON.groovy

class JackSON extends AbstractConverter { 
    Object target 

    public JackSON() { 

    } 

    public JackSON(Object target) { 
     this() 
     setTarget(target) 
    } 

    public void render(Writer out) throws ConverterException { 
     try { 
      ObjectMapper mapper = new ObjectMapper() 
      mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS) 
      mapper.configure(JsonGenerator.Feature.FLUSH_PASSED_TO_STREAM, false) 
      mapper.configure(JsonGenerator.Feature.AUTO_CLOSE_JSON_CONTENT, false) 
      mapper.writeValue(out, target) 
     } catch(e) { 
      throw new ConverterException(e) 
     } 

     try { 
      out.flush() 
      out.close() 
     } catch (Exception e) { 
      log.warn("Unexpected exception while closing a writer: " + e.getMessage()) 
     } 
    } 

    public void render(HttpServletResponse response) throws ConverterException { 
     response.setContentType(GrailsWebUtil.getContentType("application/json", "UTF-8")); 
     try { 
      render(response.getWriter()) 
     } catch (IOException e) { 
      throw new ConverterException(e) 
     } 
    } 

    public Object getWriter() throws ConverterException { 
     throw new ConverterException("Not Implemented") 
    } 

    public void convertAnother(Object o) throws ConverterException { 
     throw new ConverterException("Not Implemented") 
    } 

    public void build(Closure c) throws ConverterException { 
     throw new ConverterException("Not Implemented") 
    } 

    public ObjectMarshaller lookupObjectMarshaller(Object target) { 
     return null 
    } 

    public void setTarget(Object target) { 
     this.target = target 
    } 
} 
+1

привет, как я сказал, я не ищу, чтобы изменить мой контроллеров, только когда используется JSON, тогда вместо этого используйте JACKSON, например, перехватчик перед использованием JSON – shaydel

Смежные вопросы