Ответ от hedrewness будет работать, но он изменяет весь подход к тому, чтобы провайдер, такой как Jackson + JAXB, автоматически конвертировал возвращаемый объект в какой-то выходной формат, такой как JSON. Вдохновленный Apache CXF post (который использует класс, специфичный для CXF), я нашел один способ установить код ответа, который должен работать в любой реализации JAX-RS: ввести контекст HttpServletResponse и вручную установить код ответа. Например, вот как установить код ответа на CREATED
, когда это необходимо.
@Path("/foos/{fooId}")
@PUT
@Consumes("application/json")
@Produces("application/json")
public Foo setFoo(@PathParam("fooID") final String fooID, final Foo foo, @Context final HttpServletResponse response)
{
//TODO store foo in persistent storage
if(itemDidNotExistBefore) //return 201 only if new object; TODO app-specific logic
{
response.setStatus(Response.Status.CREATED.getStatusCode());
}
return foo; //TODO get latest foo from storage if needed
}
Улучшение: После поиска другого связанного ответа Я узнал, что в качестве переменной-члена можно ввести HttpServletResponse
, даже для класса обслуживания Singleton (по крайней мере, в RESTEasy)! Это гораздо лучший подход, чем загрязнение API с помощью деталей реализации. Это будет выглядеть так:
@Context //injected response proxy supporting multiple threads
private HttpServletResponse response;
@Path("/foos/{fooId}")
@PUT
@Consumes("application/json")
@Produces("application/json")
public Foo setFoo(@PathParam("fooID") final String fooID, final Foo foo)
{
//TODO store foo in persistent storage
if(itemDidNotExistBefore) //return 201 only if new object; TODO app-specific logic
{
response.setStatus(Response.Status.CREATED.getStatusCode());
}
return foo; //TODO get latest foo from storage if needed
}
Я собираюсь предположить, что ваш текстовый файл находится в формате CSV, я не могу представить, с каким форматом вы работаете, если это таблица текстовых файлов и не отформатирована как CSV.
Обработать файл CSV и подсчитать количество свойств в результирующем объекте Powershell.
$columnCount = @( ( Import-Csv '\path\to\file.txt' ).PSObject.Properties ).Count
Нам нужно заставить объект Properties
к массиву (который является синтаксисом @()
), чтобы точно получить счет. Свойство PSObject
является скрытым свойством для метаданных об объекте в Powershell, в котором мы ищем Properties
(имена столбцов) и получаем количество их.
Если ваш CSV не имеет заголовков, Import-Csv
требует, чтобы вы вручную указывали заголовки. Есть трюки, которые вы можете сделать, чтобы создавать уникальные имена столбцов «на лету», но они слишком сложны, просто получая подсчет столбцов.
Чтобы взять то, что вы уже пробовали выше, мы можем получить данные в первой строке и обрабатывать количество столбцов, хотя вы делали это неправильно в вопросе. Вот как это сделать:
$columnCount = ( ( Get-Content "\path\to\file.txt" | Select-Object -First 1 ) -Split ',' ).Count
Оба вышеописанных решения объединяют счетчик столбцов до одной строки кода. Но в вашем исходном примере вы сделали пару небольших ошибок:
$columns=( Get-Content "\path\to\file.txt" | select -First 1 ).Split(",")
# You forgot to prepend "columns" with a $. Should look like the below line
$Count=$columns.count
И вы забыли использовать фигурные скобки с блоком if
:
if ($count -eq 280) {
echo "column count is:$count"
} else {
email
}
Что касается использования оператор -Split
по сравнению с методом .Split()
- это чисто стилистическое предпочтение с моей стороны, и использование Split()
вполне допустимо.