У меня есть следующий код в простой службе Джерси:Джерси 1.19 возвращается 400 ошибки передачи массива в вебе-службу
@Path("/form")
@Consumes(MediaType.APPLICATION_JSON)
public class FormValueService {
private static final Logger L = LoggerFactory.getLogger(FormValueService.class);
public FormValueService() {
L.info("Creating FVS");
}
@POST
@Path("/values")
@Produces({MediaType.TEXT_PLAIN})
public String saveFormData(FormValue[] formValues) {
String formId = UUID.randomUUID().toString();
L.debug("Saving form {}", formId);
for (FormValue fv : formValues) {
L.debug(" Form value is {}", fv);
}
L.debug("Finished saving form {}", formId);
return String.valueOf(Boolean.TRUE);
}
@POST
@Path("/value")
@Produces({MediaType.TEXT_PLAIN})
public String saveFormData(FormValue formValue) throws IOException {
java.util.logging.LogManager.getLogManager().readConfiguration(this.getClass().getClassLoader().getResourceAsStream("logging.properties"));
String formId = UUID.randomUUID().toString();
L.debug("Saving form {}", formId);
L.debug(" Form value is {}", formValue);
L.debug("Finished saving form {}", formId);
return String.valueOf(Boolean.TRUE);
}
}
Второй метод работает большие:
curl -i -X POST -d '{"fieldName": "asdf", "fieldValue": "asdf", "fieldType": "CHAR"}' -H "Accept: text/plain" -H "Content-Type: application/json" localhost:8080/ManageContact/rest/form/value
нет проблем здесь, и я получаю правильные сообщения сервера.
Первый метод всегда возвращает 400 ошибку:
curl -i -X POST -d '[{"fieldName": "asdf", "fieldValue": "asdf", "fieldType": "CHAR"}]' -H "Accept: text/plain" -H "Content-Type: application/json" localhost:8080/ManageContact/rest/form/values
Это работает в Jetty, если это имеет значение
EDIT Вот конфигурация приложения:
@ApplicationPath("rest")
public class ContactApplication extends Application{
Logger logger = LoggerFactory.getLogger(ContactApplication.class);
@Override
public Set<Object> getSingletons() {
logger.debug("Entering ContactApplication.getSingletons()");
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("MyJPAJAXRS");
ContactService contactService = new ContactService(entityManagerFactory);
FormValueService formValueService = new FormValueService();
Set<Object> singletons = new HashSet<Object>();
singletons.add(contactService);
singletons.add(formValueService);
logger.debug("Exiting ContactApplication.getSingletons()");
return singletons;
}
}
Также , здесь приведены свойства log4j:
log4j.rootLogger=DEBUG, A1, LogFileAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
Вот это logging.properties
com.sun.jersey.level=ALL
com.sun.jersey.handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleFormatter.formatter=java.util.logging.SimpleFormatter
Вот как я запуская его с mvn jetty:run
:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.plugin.version}</version>
<configuration>
<systemProperties>
<systemProperty>
<name>java.util.logging.config.file</name>
<value>logging.properties</value>
</systemProperty>
</systemProperties>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webAppConfig>
<contextPath>/ManageContact</contextPath>
</webAppConfig>
<requestLog implementation="org.eclipse.jetty.server.NCSARequestLog">
<filename>target/yyyy_mm_dd.request.log</filename>
<retainDays>90</retainDays>
<append>true</append>
<extended>true</extended>
<logTimeZone>GMT</logTimeZone>
</requestLog>
</configuration>
</plugin>
Вы получаете какие-либо данные ответа ошибки или любой StackTrace на сервере ? Обычно это ошибка Джексона, и по умолчанию вы должны получить сообщение об ошибке в качестве ответа. Если вы переопределили это поведение, отмените его, чтобы узнать об ошибке –
Нет, я ничего не переопределил. Я получаю 400 ответов от cURL и вообще ничего на сервере. Для успешных запросов я получаю свои сообщения журнала на консоли сервера. См. Мое редактирование для настройки приложения, но я не вижу ничего, что проглотило бы исключение, и все сообщения моего журнала выглядят нормально. – mikeb