title: Spring Data Couchbase custom repository method
body: <p>Hi all I am having issues adding a simple custom query using the couchbase template on Spring Data Couchbase.</p>
  
  <p>Repository interfaces:</p>
  
  <pre><code>@RepositoryRestResource
  public interface EmployeeRepository extends CouchbasePagingAndSortingRepository&lt;Employee, String&gt;, EmployeeCustomRepository {
  }
  
  public interface EmployeeCustomRepository {
      List&lt;Employee&gt; customMethod(String firstName, String lastName);
  }
  </code></pre>
  
  <p>Implementation</p>
  
  <pre><code>public class EmployeeRepositoryImpl implements EmployeeCustomRepository, InitializingBean {
      @Autowired
      private RepositoryOperationsMapping templateProvider;
      private CouchbaseOperations template;
  
      @Override
      public void afterPropertiesSet() throws Exception {
          template = templateProvider.resolve(EmployeeRepository.class, Employee.class);
      }
  
      @Override
      public List&lt;Employee&gt; customMethod(String firstName, String lastName) {
          N1qlQuery query = N1qlQuery.parameterized(
                  "SELECT * FROM " + template.getCouchbaseBucket().name() + " WHERE firstName = $1 AND lastName = $2",
                  JsonArray.from(firstName, lastName));
          return template.findByN1QLProjection(query, Employee.class);
      }
  }
  </code></pre>
  
  <p>Model</p>
  
  <pre><code>@Data
  @AllArgsConstructor
  @Document
  public class Employee {
      @Id
      private String id;
  
      @Field
      private String firstName;
  
      @Field
      private String lastName;
  }
  </code></pre>
  
  <p>Main application</p>
  
  <pre><code>@SpringBootApplication
  public class SpringDataCouchbaseCustomExampleApplication implements CommandLineRunner {
  
      public static void main(String[] args) {
          SpringApplication.run(SpringDataCouchbaseCustomExampleApplication.class, args);
      }
  
      @Autowired
      private EmployeeRepository repository;
  
      @Override
      public void run(String... strings) throws Exception {
          String empId = "1";
  
          Employee employee = repository.findOne(empId);
  
          if(employee == null) {
              employee = new Employee(empId, "Joe", "Smith");
              repository.save(employee);
          }
  
          List&lt;Employee&gt; result = repository.customMethod("Joe", "Smith");
  
          System.out.println("correct result:" + result.size());
  
  
          result = repository.customMethod("Joe", "Wopa");
          System.out.println("no result:" + result.size());
      }
  }
  </code></pre>
  
  <p>Stack trace</p>
  
  <pre><code>java.lang.IllegalStateException: Failed to execute CommandLineRunner
      at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:803) [spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
      at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:784) [spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
      at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:771) [spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186) [spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175) [spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
      at com.example.SpringDataCouchbaseCustomExampleApplication.main(SpringDataCouchbaseCustomExampleApplication.java:14) [classes/:na]
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_77]
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_77]
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_77]
      at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_77]
      at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.4.3.RELEASE.jar:1.4.3.RELEASE]
  Caused by: java.lang.RuntimeException: Cannot decode ad-hoc JSON
      at org.springframework.data.couchbase.core.convert.translation.JacksonTranslationService.decodeFragment(JacksonTranslationService.java:245) ~[spring-data-couchbase-2.1.6.RELEASE.jar:na]
      at org.springframework.data.couchbase.core.CouchbaseTemplate.findByN1QLProjection(CouchbaseTemplate.java:466) ~[spring-data-couchbase-2.1.6.RELEASE.jar:na]
      at com.example.EmployeeRepositoryImpl.customMethod(EmployeeRepositoryImpl.java:26) ~[classes/:na]
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_77]
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_77]
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_77]
      at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_77]
      at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503) ~[spring-data-commons-1.12.6.RELEASE.jar:na]
      at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:478) ~[spring-data-commons-1.12.6.RELEASE.jar:na]
      at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) ~[spring-data-commons-1.12.6.RELEASE.jar:na]
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) ~[spring-data-commons-1.12.6.RELEASE.jar:na]
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at org.springframework.data.couchbase.repository.support.ViewPostProcessor$ViewInterceptor.invoke(ViewPostProcessor.java:87) ~[spring-data-couchbase-2.1.6.RELEASE.jar:na]
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
      at com.sun.proxy.$Proxy77.customMethod(Unknown Source) ~[na:na]
      at com.example.SpringDataCouchbaseCustomExampleApplication.run(SpringDataCouchbaseCustomExampleApplication.java:31) [classes/:na]
      at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
      ... 11 common frames omitted
  Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "default" (class com.example.Employee), not marked as ignorable (3 known properties: "lastName", "id", "firstName"])
   at [Source: {"default":{"firstName":"Joe","lastName":"Smith","_class":"com.example.Employee"}}; line: 1, column: 83] (through reference chain: com.example.Employee["default"])
      at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:834) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1093) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1477) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperties(BeanDeserializerBase.java:1431) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:487) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1198) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798) ~[jackson-databind-2.8.5.jar:2.8.5]
      at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2842) ~[jackson-databind-2.8.5.jar:2.8.5]
      at org.springframework.data.couchbase.core.convert.translation.JacksonTranslationService.decodeFragment(JacksonTranslationService.java:242) ~[spring-data-couchbase-2.1.6.RELEASE.jar:na]
      ... 33 common frames omitted
  </code></pre>